backup_on_the_go 0.1.5 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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