github-backup 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README.md +10 -2
  2. data/bin/github-backup +17 -2
  3. data/lib/github-backup.rb +40 -10
  4. metadata +7 -26
data/README.md CHANGED
@@ -4,7 +4,7 @@ Back up your Github repositories locally.
4
4
 
5
5
  To install it as a Gem, just run:
6
6
 
7
- $ sudo gem install ddollar-github-backup
7
+ $ gem install github-backup
8
8
 
9
9
  To use it:
10
10
 
@@ -18,13 +18,21 @@ You will need a `~/.gitconfig` file in place with a `[github]` section
18
18
 
19
19
  See: http://github.com/guides/tell-git-your-user-name-and-email-address
20
20
 
21
+ ### Specify authentication at the command line
22
+
23
+ If you don't have a `[github]` section set up in your `~/.gitconfig` file, you
24
+ can provide your user name and Github API at the command line.
25
+
21
26
  ## License
22
27
 
23
28
  MIT License
24
29
 
25
30
  ## Author
26
31
 
27
- David Dollar
32
+ Created by David Dollar
33
+
34
+ Patches contributed by:
35
+ Gabriel Gilder
28
36
 
29
37
  ## Copyright
30
38
 
@@ -4,14 +4,29 @@ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
4
 
5
5
  require 'octopi'
6
6
  require 'github-backup'
7
+ require 'optparse'
8
+
9
+ options = {}
10
+ optionparser = OptionParser.new do |opts|
11
+ opts.banner = "Usage: github-backup [options] username local_backup_root"
12
+
13
+ opts.on("-t", "--token TOKEN", "Github API Token") do |t|
14
+ options[:token] = t
15
+ end
16
+
17
+ opts.on("-u", "--username USER", "Github API Username") do |u|
18
+ options[:login] = u
19
+ end
20
+ end
21
+ optionparser.parse!
7
22
 
8
23
  unless ARGV.length == 2
9
- puts "usage: github-backup <username> <local backup root>"
24
+ puts optionparser.help
10
25
  exit 1
11
26
  end
12
27
 
13
28
  username = ARGV.shift
14
29
  root = ARGV.shift
15
30
 
16
- backup = Github::Backup.new(username, root)
31
+ backup = Github::Backup.new(username, root, options)
17
32
  backup.execute
@@ -5,41 +5,71 @@ module Github; end
5
5
 
6
6
  class Github::Backup
7
7
 
8
- VERSION = "0.4.1"
8
+ VERSION = "0.5.0"
9
9
 
10
10
  include Octopi
11
11
 
12
12
  attr_reader :backup_root, :debug, :username
13
13
 
14
- def initialize(username, backup_root)
14
+ def initialize(username, backup_root, options = {})
15
15
  @username = username
16
16
  @backup_root = backup_root
17
+ @options = options
18
+ if (options[:token] && !options[:login])
19
+ options[:login] = @username
20
+ end
17
21
  @debug = false
18
22
  end
19
23
 
20
24
  def execute
21
- FileUtils::mkdir_p(backup_root)
22
- authenticated do
23
- repositories = User.find(username).repositories.sort_by { |r| r.name }
24
- repositories.each do |repository|
25
- puts "Backing up: #{repository.name}"
26
- backup_repository repository
27
- end
28
- end
25
+ backup_all @options
26
+
29
27
  rescue Errno::ENOENT
30
28
  puts "Please install git and create a ~/.gitconfig"
31
29
  puts " See: http://github.com/guides/tell-git-your-user-name-and-email-address"
32
30
  rescue NoMethodError
33
31
  puts "Please add a [github] section to your ~/.gitconfig"
34
32
  puts " See: http://github.com/guides/tell-git-your-user-name-and-email-address"
33
+ rescue Octopi::APIError => e
34
+ # only handle "Authentication required" errors
35
+ unless (e.message =~ /status 401$/)
36
+ raise e
37
+ end
38
+ puts "Github API authentication failed."
39
+ puts "Please add a [github] section to your ~/.gitconfig"
40
+ puts " See: http://github.com/guides/tell-git-your-user-name-and-email-address"
41
+ puts "Or, use the arguments to authenticate with your username and API token."
35
42
  end
36
43
 
37
44
  private ######################################################################
38
45
 
46
+ def github_authenticate(options={})
47
+ if (options[:login])
48
+ authenticated_with(options) do
49
+ yield
50
+ end
51
+ else
52
+ authenticated do
53
+ yield
54
+ end
55
+ end
56
+ end
57
+
39
58
  def backup_directory_for(repository)
40
59
  File.join(backup_root, repository.name)
41
60
  end
42
61
 
62
+ def backup_all(options={})
63
+ FileUtils::mkdir_p(backup_root)
64
+ github_authenticate(options) do
65
+ repositories = User.find(username).repositories.sort_by { |r| r.name }
66
+ repositories.each do |repository|
67
+ puts "Backing up: #{repository.name}"
68
+ backup_repository repository
69
+ end
70
+ end
71
+ end
72
+
43
73
  def backup_repository(repository)
44
74
  if File.exists?(backup_directory_for(repository))
45
75
  backup_repository_incremental(repository)
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-backup
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 4
9
- - 1
10
- version: 0.4.1
4
+ prerelease:
5
+ version: 0.5.0
11
6
  platform: ruby
12
7
  authors:
13
8
  - |
@@ -17,37 +12,29 @@ autorequire:
17
12
  bindir: bin
18
13
  cert_chain: []
19
14
 
20
- date: 2010-09-01 00:00:00 -04:00
15
+ date: 2011-09-05 00:00:00 -04:00
21
16
  default_executable:
22
17
  dependencies:
23
18
  - !ruby/object:Gem::Dependency
19
+ name: parka
24
20
  requirement: &id001 !ruby/object:Gem::Requirement
25
21
  none: false
26
22
  requirements:
27
23
  - - ">="
28
24
  - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
25
  version: "0"
33
26
  type: :development
34
- name: parka
35
27
  prerelease: false
36
28
  version_requirements: *id001
37
29
  - !ruby/object:Gem::Dependency
30
+ name: octopi
38
31
  requirement: &id002 !ruby/object:Gem::Requirement
39
32
  none: false
40
33
  requirements:
41
34
  - - ~>
42
35
  - !ruby/object:Gem::Version
43
- hash: 7
44
- segments:
45
- - 0
46
- - 2
47
- - 8
48
- version: 0.2.8
36
+ version: 0.4.5
49
37
  type: :runtime
50
- name: octopi
51
38
  prerelease: false
52
39
  version_requirements: *id002
53
40
  description: Backup your Github repositories
@@ -78,23 +65,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
65
  requirements:
79
66
  - - ">="
80
67
  - !ruby/object:Gem::Version
81
- hash: 3
82
- segments:
83
- - 0
84
68
  version: "0"
85
69
  required_rubygems_version: !ruby/object:Gem::Requirement
86
70
  none: false
87
71
  requirements:
88
72
  - - ">="
89
73
  - !ruby/object:Gem::Version
90
- hash: 3
91
- segments:
92
- - 0
93
74
  version: "0"
94
75
  requirements: []
95
76
 
96
77
  rubyforge_project: nowarning
97
- rubygems_version: 1.3.7
78
+ rubygems_version: 1.6.2
98
79
  signing_key:
99
80
  specification_version: 3
100
81
  summary: Backup your Github repositories