git-reclone 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 773ab4311def22ad7a61354f524f3439850a3b850a7d7d85478fb5ee50546de8
4
+ data.tar.gz: 6bc7f99038ba912dc4f132d7e904807a39d1379621486249f743f5c3c0aefbe1
5
+ SHA512:
6
+ metadata.gz: c6a5922718687dc8c61bdc899a084f731e0d8ab9db978e1a8b606f3bec13cae0cd7264f751316aeaf30221bf46a5f9b146161743f5f17945553090235d7f346c
7
+ data.tar.gz: a5c29b46ea984b37bb6f6ecce064e5e760d286d9b064b488c053967fe49fe3f692c1ab943a121329c7bd7daf2a5e5e3a23d7bdf06a098714b25d9cbb3901660d
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "git-reclone"
4
+
5
+ # git-reclone by jeremy warner
6
+ # easily reset git repo from remotes
7
+
8
+ GitReclone.new.fire ARGV
@@ -0,0 +1,5 @@
1
+ # universal version tracking
2
+
3
+ class GitReclone
4
+ Version = "0.2.3"
5
+ end
@@ -0,0 +1,129 @@
1
+ # git-reclone gem
2
+ # jeremy warner
3
+
4
+ =begin
5
+ todo: add an option to automatically add a backup of the local copy
6
+ todo: add all remotes other than the origins, maintain connections
7
+ todo: -b / --backup, and this actually should be the default (maybe)
8
+ =end
9
+
10
+ require "colored"
11
+ require "fileutils"
12
+ require "git-reclone-version"
13
+
14
+ class GitReclone
15
+ def initialize(test=false)
16
+ @pdelay = 0.01 # constant for arrow speed
17
+ @testing = test
18
+ @verify = !test
19
+ end
20
+
21
+ def fire(args = [])
22
+ opts = args.select {|a| a[0] == "-" }
23
+ opts.each {|o| parse_opt o }
24
+ exit 0 if (@testing || opts.first)
25
+ parse_arg((args - opts).first)
26
+ end
27
+
28
+ def pexit(msg)
29
+ puts msg
30
+ exit 1
31
+ end
32
+
33
+ def parse_opt(o)
34
+ case o
35
+ when "--force", "-f"
36
+ @verify = false
37
+ when "--help", "-h"
38
+ puts GitReclone::Help
39
+ when "--version", "-v"
40
+ puts GitReclone::Version
41
+ end
42
+ end
43
+
44
+ def parse_arg(a)
45
+ a.nil?? verify(remote) : verify(remote(a))
46
+ end
47
+
48
+ def no_repo?
49
+ `git status 2>&1`.split("\n").first ==
50
+ "fatal: Not a git repository (or any of the parent directories): .git"
51
+ end
52
+
53
+ def git_root
54
+ %x{git rev-parse --show-toplevel}
55
+ end
56
+
57
+ def remotes
58
+ %x{git remote -v}.split("\n").map { |r| r.split[1] }.uniq
59
+ end
60
+
61
+ def reclonebanner
62
+ 25.times { |x| slowp "\rpreparing| ".red << "~" * x << "#==>".red }
63
+ 25.times { |x| slowp "\rpreparing| ".red << " " * x << "~" * (25 - x) << "#==>".yellow }
64
+ printf "\rREADY.".red << " " * 50 << "\n"
65
+ end
66
+
67
+ def slowp(x)
68
+ sleep @pdelay
69
+ printf x
70
+ end
71
+
72
+ # trying to parse out which remote should be the new source
73
+ def remote(search = /.*/)
74
+ pexit "Not currently in a git repository.".yellow if no_repo?
75
+
76
+ r = remotes.find { |gr| gr.match search }
77
+
78
+ pexit "No remotes found in this repository.".yellow if remotes.nil?
79
+
80
+ if r.nil?
81
+ errmsg = "No remotes found that match #{search.to_s.red}. All remotes:\n" + remotes.join("\n")
82
+ pexit errmsg
83
+ return errmsg
84
+ else
85
+ return r
86
+ end
87
+ end
88
+
89
+ # show remote to user and confirm location (unless using -f)
90
+ def verify(r)
91
+ reclonebanner
92
+ puts "Remote source:\t".red << r
93
+ puts "Local target:\t".red << git_root
94
+
95
+ if @verify
96
+ puts "Warning: this will completely overwrite the local copy.".yellow
97
+ printf "Continue recloning local repo? [yN] ".yellow
98
+ unless $stdin.gets.chomp.downcase[0] == "y"
99
+ puts "Reclone aborted.".green
100
+ return
101
+ end
102
+ end
103
+
104
+ reclone remote, git_root.chomp unless @testing
105
+ end
106
+
107
+ # overwrite the local copy of the repository with the remote one
108
+ def reclone(remote, root)
109
+ # remove the git repo from this computer
110
+ if !@testing
111
+ tree = Dir.glob("*", File::FNM_DOTMATCH).select {|d| not ['.','..'].include? d }
112
+ FileUtils.rmtree (tree)
113
+ end
114
+
115
+ cloner = "git clone \"#{remote}\" \"#{root}\""
116
+
117
+ puts "Recloned successfully.".green if system(cloner)
118
+ end
119
+ end
120
+
121
+ GitReclone::Help = <<-HELP
122
+ #{'git reclone'.red}: a git repo restoring tool
123
+
124
+ reclones from the remote listed first, overwriting your local copy.
125
+ to restore from a particular remote repository, specify the host:
126
+
127
+ git reclone bitbucket # reclone using bitbucket
128
+ git reclone github # reclone using github
129
+ HELP
@@ -0,0 +1,55 @@
1
+ git-reclone :rocket:
2
+ =================
3
+
4
+
5
+ [![MIT](https://img.shields.io/npm/l/alt.svg?style=flat)](http://jeremywrnr.com/mit-license)
6
+ -[![Gem Version](https://badge.fury.io/rb/git-reclone.svg)](https://badge.fury.io/rb/git-reclone)
7
+ [![Build Status](https://travis-ci.org/jeremywrnr/git-reclone.svg?branch=master)](https://travis-ci.org/jeremywrnr/git-reclone)
8
+ [![Code Climate](https://codeclimate.com/github/jeremywrnr/git-reclone/badges/gpa.svg)](https://codeclimate.com/github/jeremywrnr/git-reclone)
9
+
10
+
11
+ destroy your local copy of a git repo, and reclone it from your remote.
12
+
13
+ ![Screencast](http://i.imgur.com/HIvZCJB.gif)
14
+
15
+ tested and works well for:
16
+
17
+ - github
18
+ - bitbucket
19
+
20
+ ## setup
21
+
22
+ [sudo] gem install git-reclone
23
+
24
+ This will enable the `git reclone` command automatically!
25
+
26
+
27
+ ## usage
28
+
29
+ git reclone
30
+
31
+ reclones from the first git remote. to clone a specific remote, specify some
32
+ part (or all) of the host name. for example:
33
+
34
+ git reclone bit
35
+ git reclone bucket
36
+ git reclone bitbucket
37
+
38
+ will all overwrite the current repository with bitbucket's remote (assuming
39
+ that some other host/repo name doesn't also match 'bitbucket').
40
+
41
+
42
+ ## about
43
+
44
+ sometimes i mess up git histories, with (merges or rebasing, etc), and it
45
+ becomes more of a headache to figure out how to undo what i did than to just
46
+ reclone the remote copy and apply the changes i want in the right way. i was
47
+ doing this often enough that i figured it would be nice to have a tool that
48
+ just did this automatically. besides, it can be satisfying to just reclone your
49
+ local copy and start anew - after all, what are backups meant for?
50
+
51
+ ## testing
52
+
53
+ bundle || gem install bundler && bundle
54
+ rake # running git-reclone's tests
55
+
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: git-reclone
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.3
5
+ platform: ruby
6
+ authors:
7
+ - Jeremy Warner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-11-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: colored
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.2'
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '1.2'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '1.2'
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.2'
33
+ - !ruby/object:Gem::Dependency
34
+ name: ronn
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rake
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ description: reclone a local git repo from the remote.
76
+ email: jeremy.warner@berkeley.edu
77
+ executables:
78
+ - git-reclone
79
+ extensions: []
80
+ extra_rdoc_files: []
81
+ files:
82
+ - bin/git-reclone
83
+ - lib/git-reclone-version.rb
84
+ - lib/git-reclone.rb
85
+ - readme.md
86
+ homepage: http://github.com/jeremywrnr/git-reclone
87
+ licenses:
88
+ - MIT
89
+ metadata: {}
90
+ post_install_message:
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubygems_version: 3.0.6
106
+ signing_key:
107
+ specification_version: 4
108
+ summary: reclone a local git repo from the remote.
109
+ test_files: []