backup_on_the_go 0.1.5 → 0.2.2

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.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YzM0MTI2YTgwZDhlMzk4YmVkM2Q4Y2UxOGI0NjM3N2JhZjlmNDk5YQ==
5
- data.tar.gz: !binary |-
6
- ZTY3MDI4ZTI3ZGRjNzRhNGMzYWVkMzA2ODNhZDY2ZmIxODgxNzExMQ==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- NzcyZWM0NjZhY2NkYTU1YzRjMmVmODgyNjFkZDc5ZDA0MDQ4ODUxNDllYTFm
10
- YTUyZDc2MGVhMjRlZDIzM2MyMTMxYTI5NGJhNWFmMmQ2NzU0ODUxMjQ1OWFj
11
- OGJjOTdkMjdjMWMxZGM2ZGVhMGFkYWRhOGU2ZGY5OGFiNzRhZDY=
12
- data.tar.gz: !binary |-
13
- ZjUyZGFiMDcyMWM3MTMwMjg4Zjk0MDEzOGJlMjNhYWM1OGY5OWMwYzRhNmNj
14
- ODIyM2ZjMDhhOTVhMTJiMmM5ZWYzMTYzMDZhNDg0MDEzNDM5NzIzZmFiYzMz
15
- MWFkM2Y4ZDZiMGU3OTIzNTRhNDE4N2QzMWQxODJjOGE0YjdjODM=
2
+ SHA1:
3
+ metadata.gz: 74d66dc8e67ff27c2920c630c0cb04f4e11f7377
4
+ data.tar.gz: 442f688f41e905f920ae82f05a340421385954e4
5
+ SHA512:
6
+ metadata.gz: ed89ec5e52c44b13810ac322d4098dd4ea0ffda0936822cf72c9400c01bdd2192c8639464167a76861ff5810dcf2acb8a842a3c008b0f5b9353b6aa3efdc18bb
7
+ data.tar.gz: 77c41424789d658bfe81782ea151091e14f38f92c2d55d152c1230f7f41eb39aac9b5d261ee3a0dd0ea686727003cdd534d5ac9a696a73f484f5d848b9f0ecd7
data/README.md CHANGED
@@ -61,9 +61,22 @@ dyno instead of the web dyno:
61
61
  Done!
62
62
 
63
63
 
64
+ ## Real World Examples
65
+
66
+ For a real world example, you can check [my backup BitBucket Account][]. For
67
+ another example of backing up organizations, see EditorConfig on [GitHub][4]
68
+ and [BitBucket][5].
69
+
70
+
71
+
72
+ [![githalytics.com alpha](https://cruel-carlota.pagodabox.com/6f3b3972996375aafd08f51e6ed619cc "githalytics.com")](http://githalytics.com/xuhdev/backup-on-the-go)
73
+
64
74
  [1]: https://rubygems.org/gems/backup_on_the_go
65
75
  [2]: http://rubydoc.info/github/xuhdev/backup-on-the-go/master/frames
66
76
  [3]: http://rubydoc.info/github/xuhdev/backup-on-the-go/master/BackupOnTheGo.backup
67
- [heroku_signup]: https://id.heroku.com/signup
77
+ [4]: https://github.com/editorconfig
78
+ [5]: https://bitbucket.org/editorconfig
68
79
  [Heroku Toolbelt]: https://toolbelt.heroku.com/
80
+ [My backup BitBucket Account]: https://bitbucket.org/xuhdev-backup
81
+ [heroku_signup]: https://id.heroku.com/signup
69
82
  [scale your dyno formation]: https://devcenter.heroku.com/articles/scaling
@@ -11,6 +11,7 @@ module BackupOnTheGo #:nodoc:#
11
11
 
12
12
  DEFAULT_CONFIG = {
13
13
  :backup_fork => false,
14
+ :backup_private => false,
14
15
  :git_cmd => 'git',
15
16
  :github_repos_max => '200',
16
17
  :is_private => true,
@@ -19,29 +20,43 @@ module BackupOnTheGo #:nodoc:#
19
20
  :verbose => true
20
21
  }.freeze
21
22
 
22
- # Backup GitHub repositories to BitBucket.
23
+
24
+ # Back up GitHub repositories to BitBucket.
23
25
  #
24
26
  # = Parameters
25
- # * <tt>:backup_fork</tt> - Optional boolean - <tt>true</tt> to backup forked repositories, <tt>false</tt> to skip them. Default is <tt>false</tt>.
27
+ # * <tt>:backup_fork</tt> - Optional boolean - <tt>true</tt> to back up forked repositories, <tt>false</tt> to skip them. Default is <tt>false</tt>.
28
+ # * <tt>:backup_private</tt> - Optional boolean - <tt>true</tt> to back up private repositories, <tt>false</tt> to NOT back up private repositories. Default is <tt>false</tt>.
26
29
  # * <tt>:bitbucket_password</tt> - Optional string - The password to access the BitBucket account. If not specified, a prompt will show up to ask for the password.
27
30
  # * <tt>:bitbucket_repos_owner</tt> - Optional string - Owner of the backup repositories on BitBucket. The owner could be a team. If not specified, <tt>:bitbucket_user</tt> will be used.
28
31
  # * <tt>:bitbucket_user</tt> - *Required* string if <tt>:user</tt> is not specified - The user name on BitBucket. If not specified, <tt>:user</tt> will be used.
29
32
  # * <tt>:git_cmd</tt> - Optional string - The git command you want to use. Default is 'git'.
33
+ # * <tt>:github_password</tt> - Optional string - When backup_private is set to true, this is the password used to access the GitHub account. If not specified, a prompt will show up to ask for the password.
30
34
  # * <tt>:github_repos_max</tt> - Optional string - The max number of your GitHub repos, since GitHub API requires to give a repo number upper limit. Usually you don't need to set up this number unless you have more than 200 repositories. Default is <tt>"200"</tt>.
31
35
  # * <tt>:github_repos_owner</tt> - Optional string - The owner of the repositories that need to be backed up. The owner could be an organization. If not specified, <tt>:github_user</tt> will be used.
32
36
  # * <tt>:github_user</tt> - *Required* string if <tt>:user</tt> is not specified - The user name on GitHub. If not specified, <tt>:user</tt> will be used.
33
- # * <tt>:is_private</tt> - Optional boolean - <tt>true</tt> to make the backup repositories private, <tt>false</tt> to make them public. Default is <tt>true</tt>.
34
- # * <tt>:no_public_forks</tt> - Optional boolean - <tt>true</tt> to forbid public fork for the backup repositories, <tt>false</tt> to allow public fork. Default is <tt>true</tt>.
37
+ # * <tt>:is_private</tt> - Optional boolean - <tt>true</tt> to make the backup repositories private even if the corresponding github repositories are public; <tt>false</tt> to keep the original privacy. Default is <tt>true</tt>.
38
+ # * <tt>:no_public_forks</tt> - Optional boolean - <tt>true</tt> to forbid public fork for the backup repositories, <tt>false</tt> to allow public fork. Only valid for public backup repositories. Default is <tt>true</tt>.
35
39
  # * <tt>:repo_prefix</tt> - Optional string - The prefix you wanna prepend to the backup repository names. In this way, if you have a repository with the same name on BitBucket, it won't get flushed. Default is <tt>"backup-on-the-go-"</tt>.
36
40
  # * <tt>:user</tt> - *Required* string if <tt>:github_user</tt> and <tt>:bitbucket_user</tt> are not both specified - The user name of GitHub and BitBucket (if they are same for you). If you want to use different user names on GitHub and BitBucket, please specify <tt>:github_user</tt> and <tt>:bitbucket_user</tt> instead.
37
41
  # * <tt>:verbose</tt> - Optional boolean - <tt>true</tt> to print additional information and <tt>false</tt> to suppress them. Default is <tt>true</tt>.
38
42
  #
39
43
  # = Examples
40
44
  #
41
- # # Back up personal repositories
45
+ # # Back up personal public repositories only
46
+ # BackupOnTheGo.backup :github_user => 'github_user_name',
47
+ # :bitbucket_user => 'bitbucket_user_name',
48
+ # :is_private => false, # make backup repositories public
49
+ # :bitbucket_password => 'bitbucket_password',
50
+ # :repo_prefix => '' # don't need any prefix
51
+ #
52
+ # = Examples
53
+ #
54
+ # # Back up personal public and private repositories
42
55
  # BackupOnTheGo.backup :github_user => 'github_user_name',
43
56
  # :bitbucket_user => 'bitbucket_user_name',
57
+ # :backup_private => true, # back up private repositories
44
58
  # :is_private => false, # make backup repositories public
59
+ # :github_password => 'github_password',
45
60
  # :bitbucket_password => 'bitbucket_password',
46
61
  # :repo_prefix => '' # don't need any prefix
47
62
  #
@@ -77,11 +92,19 @@ module BackupOnTheGo #:nodoc:#
77
92
  config[:bitbucket_repos_owner] = config[:bitbucket_user]
78
93
  end
79
94
 
80
- # Ask for the password if it is not specified
95
+ # Ask for the passwords if they are not specified
96
+ if config[:backup_private] and !config.has_key?(:github_password)
97
+ config[:github_password] = ask("Enter your GitHub password for #{config[:github_user]}: ") { |q| q.echo = false }
98
+ end
81
99
  unless config.has_key?(:bitbucket_password)
82
- config[:bitbucket_password] = ask("Enter your BitBucket password: ") { |q| q.echo = false }
100
+ config[:bitbucket_password] = ask("Enter your BitBucket password for #{config[:bitbucket_user]}: ") { |q| q.echo = false }
83
101
  end
84
102
 
103
+ # print an empty line
104
+ puts
105
+
106
+ # log in BitBucket
107
+
85
108
  bb = BitBucket.new :login => config[:bitbucket_user], :password => config[:bitbucket_password]
86
109
 
87
110
  backup_repo_names = Array.new
@@ -92,13 +115,12 @@ module BackupOnTheGo #:nodoc:#
92
115
  end
93
116
  end
94
117
 
95
- # obtain github repos
96
- gh_repos = Github.repos.list :user => config[:github_repos_owner],
97
- :per_page => config[:github_repos_max]
98
-
99
- gh_repos.each do |repo|
118
+ # handling each GitHub repo, used below
119
+ repo_each_proc = Proc.new do |repo|
100
120
  next if repo.fork && !config[:backup_fork]
101
121
 
122
+ is_private = config[:is_private] || repo.private?
123
+
102
124
  puts "Backing up #{repo.name}..." if config[:verbose]
103
125
 
104
126
  backup_repo_name = "#{config[:repo_prefix]}#{repo.name}"
@@ -108,7 +130,8 @@ module BackupOnTheGo #:nodoc:#
108
130
  puts "Creating new repository #{config[:bitbucket_repos_owner]}/#{backup_repo_name}..." if config[:verbose]
109
131
  begin
110
132
  bb.repos.create :name => backup_repo_name, :owner => config[:bitbucket_repos_owner],
111
- :scm => 'git', :is_private => config[:is_private], :no_public_forks => config[:no_public_forks]
133
+ :scm => 'git', :is_private => is_private,
134
+ :no_public_forks => config[:no_public_forks]
112
135
  rescue
113
136
  puts_warning "Creation of repository #{config[:bitbucket_repos_owner]}/#{backup_repo_name} failed."
114
137
  end
@@ -120,17 +143,22 @@ module BackupOnTheGo #:nodoc:#
120
143
  bb.repos.edit config[:bitbucket_repos_owner], backup_repo_name,
121
144
  :website => repo.homepage,
122
145
  :description => repo.description,
123
- :is_private => config[:is_private],
124
- :no_public_forks => config[:no_public_forks]
125
- rescue
146
+ :is_private => is_private,
147
+ :no_public_forks => is_private && config[:no_public_forks]
148
+ rescue Exception => e
126
149
  puts_warning "Failed to update information for #{config[:bitbucket_repos_owner]}/#{backup_repo_name}"
150
+ puts e.message
127
151
  end
128
152
 
129
153
  Dir.mktmpdir do |dir|
130
- cmd = "#{config[:git_cmd]} clone --mirror #{repo.git_url} #{dir}/tmp-repo"
131
- puts "Executing #{cmd}" if config[:verbose]
154
+ # clone git url
155
+ clone_url = repo.clone_url
156
+ clone_url.sub!(/https:\/\//,
157
+ "https://#{config[:github_user]}:#{config[:github_password]}@") if config[:backup_private]
158
+ cmd = "#{config[:git_cmd]} clone --mirror '#{clone_url}' #{dir}/tmp-repo"
159
+ puts "Executing [#{config[:git_cmd]} clone --mirror 'https://#{config[:bitbucket_user]}:your_password@github.com/#{config[:github_repos_owner]}/#{repo.name}.git' #{dir}/tmp-repo]" if config[:verbose]
132
160
  unless system(cmd)
133
- puts_warning "'git clone' failed for #{repo.git_url}\n"
161
+ puts_warning "'git clone' failed for #{clone_url}\n"
134
162
  break
135
163
  end
136
164
 
@@ -174,6 +202,39 @@ module BackupOnTheGo #:nodoc:#
174
202
  puts
175
203
  end
176
204
  end
205
+
206
+ # obtain github repos
207
+ if config[:backup_private]
208
+ gh = Github.new :login => config[:github_user], :password => config[:github_password]
209
+ else
210
+ gh = Github.new
211
+ end
212
+
213
+ # private repos
214
+ if config[:backup_private]
215
+ puts "Backing up private repositories...\n".green
216
+
217
+ gh_repos = gh.repos.list :per_page => config[:github_repos_max]
218
+
219
+ gh_repos.each do |repo|
220
+ # only back up private repositories with the owner specified
221
+ if repo.owner.login == config[:github_repos_owner] and repo.private?
222
+ repo_each_proc.call(repo)
223
+ end
224
+ end
225
+ end
226
+
227
+ # public repos
228
+ puts "Backing up public repositories...\n".green
229
+
230
+ gh_repos = gh.repos.list :user => config[:github_repos_owner],
231
+ :per_page => config[:github_repos_max]
232
+
233
+ gh_repos.each do |repo|
234
+ repo_each_proc.call(repo)
235
+ end
236
+
237
+
177
238
  end
178
239
 
179
240
  private
@@ -3,8 +3,8 @@
3
3
  module BackupOnTheGo #:nodoc:#
4
4
  module VERSION
5
5
  MAJOR = 0
6
- MINOR = 1
7
- TINY = 5
6
+ MINOR = 2
7
+ TINY = 2
8
8
 
9
9
  STRING = [MAJOR, MINOR, TINY].compact.join('.')
10
10
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: backup_on_the_go
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hong Xu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-06 00:00:00.000000000 Z
11
+ date: 2013-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: github_api
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.8.11
19
+ version: 0.10.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.8.11
26
+ version: 0.10.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: highline
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ~>
32
32
  - !ruby/object:Gem::Version
33
- version: 1.6.16
33
+ version: 1.6.19
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
- version: 1.6.16
40
+ version: 1.6.19
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bitbucket_rest_api
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -88,17 +88,17 @@ require_paths:
88
88
  - lib
89
89
  required_ruby_version: !ruby/object:Gem::Requirement
90
90
  requirements:
91
- - - ! '>='
91
+ - - '>='
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
94
  required_rubygems_version: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - ! '>='
96
+ - - '>='
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  requirements: []
100
100
  rubyforge_project:
101
- rubygems_version: 2.0.3
101
+ rubygems_version: 2.0.6
102
102
  signing_key:
103
103
  specification_version: 4
104
104
  summary: Backup GitHub repositories to BitBucket