gitti-backup 0.0.1 → 0.1.0

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1d7f9258dfc4b2096d4eba9f5ee6d4c5ce959c0f
4
- data.tar.gz: d4d6ae45a22ef15d65bdaaf36c50e48d04b13814
3
+ metadata.gz: a438558dd2333adfe3211959e6b62a9a1bb65458
4
+ data.tar.gz: 57e3aa5153a0d087adaef5f4b170b49acfd7c00b
5
5
  SHA512:
6
- metadata.gz: e810a27fcd3ed818223625b4f1f5baf42cb90b19dd37307ef896c435821c0b89b73f0253f74c858548cabb0f4164c682a4fcdcc97ee24ba07eac88238aeff854
7
- data.tar.gz: 857d68067ced2982261bf8408dcadc4c992553223a7771f1446b108690d7d94752cfa42cde2a19d25c5277aeae734e1be7f48c9b7c1f839e9d65182f3c0ffb1d
6
+ metadata.gz: 7ea1bb3df6a888a1685943f1d0f029b6a4e88a1fce7e488101ca22aa0466d84f51270f11025df19a309c48c805356a64ef85f48174e4950c6ddd10ec6ce05b19
7
+ data.tar.gz: 7c73898fbc3ec21cbbf54fa971d1a960f1c04396a4409c7dd7bee781bb16ef68352e7603addb5ce8ccdf4109220469ceccb3f56c27c74288528987246a3eb5e8
data/Manifest.txt CHANGED
@@ -3,4 +3,7 @@ Manifest.txt
3
3
  README.md
4
4
  Rakefile
5
5
  lib/gitti/backup.rb
6
+ lib/gitti/backup/backup.rb
7
+ lib/gitti/backup/repo.rb
8
+ lib/gitti/backup/reposet.rb
6
9
  lib/gitti/backup/version.rb
data/Rakefile CHANGED
@@ -3,7 +3,7 @@ require './lib/gitti/backup/version.rb'
3
3
 
4
4
  Hoe.spec 'gitti-backup' do
5
5
 
6
- self.version = Gitti::GitBackup::VERSION
6
+ self.version = GittiBackup::VERSION
7
7
 
8
8
  self.summary = 'gitti-backup - (yet) another (lite) git backup command line script'
9
9
  self.description = summary
data/lib/gitti/backup.rb CHANGED
@@ -4,8 +4,11 @@ require 'gitti'
4
4
 
5
5
  # our own code
6
6
  require 'gitti/backup/version' # note: let version always go first
7
+ require 'gitti/backup/repo'
8
+ require 'gitti/backup/reposet' ## todo: move to gitti-support (commons) gem ??
9
+ require 'gitti/backup/backup'
7
10
 
8
11
 
9
12
  # say hello
10
- puts Gitti::GitBackup.banner if defined?($RUBYLIBS_DEBUG)
13
+ puts GittiBackup.banner if defined?($RUBYLIBS_DEBUG)
11
14
 
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ module Gitti
5
+
6
+
7
+ class GitBackup
8
+
9
+ def initialize( backup_dir = '~/backup' )
10
+ @backup_dir = File.expand_path( backup_dir )
11
+ pp @backup_dir
12
+ ## use/renmae to backup_root - why? why not??
13
+ end
14
+
15
+ def backup( repos )
16
+ ## default to adding folder per day ## e.g. 2015-11-20
17
+ backup_dir = "#{@backup_dir}/#{Date.today.strftime('%Y-%m-%d')}"
18
+ pp backup_dir
19
+
20
+ FileUtils.mkdir_p( backup_dir ) ## make sure path exists
21
+
22
+ org_count = 0
23
+ repo_count = 0
24
+
25
+ repos.each do |key,values|
26
+ dest_dir = "#{backup_dir}/#{key}"
27
+ FileUtils.mkdir_p( dest_dir ) ## make sure path exists
28
+
29
+ values.each_with_index do |value,i|
30
+ puts " \##{repo_count+1} [#{i+1}/#{values.size}] #{value}"
31
+
32
+ puts " #{key}/#{value}"
33
+
34
+ repo = GitHubBareRepo.new( key, value ) ## owner, name e.g. rubylibs/webservice
35
+ success = repo.backup_with_retries( dest_dir ) ## note: defaults to two tries
36
+ ## todo/check: fail if success still false after x retries? -- why? why not?
37
+
38
+ repo_count += 1
39
+
40
+ ### exit if repo_count > 2
41
+ end
42
+
43
+ org_count += 1
44
+ end
45
+
46
+ ## print stats
47
+
48
+ puts " #{org_count} orgs, #{repo_count} repos"
49
+ end ## backup
50
+
51
+ end ## GitBackup
52
+
@@ -0,0 +1,60 @@
1
+ # encoding: utf-8
2
+
3
+ module Gitti
4
+
5
+
6
+ class GitHubBareRepo ## use/rename to GitHubServerRepo - why? why not?
7
+ def initialize( owner, name )
8
+ @owner = owner ## use/rename to login or something - why? why not??
9
+ @name = name # e.g. "rubylibs/webservice"
10
+ end
11
+
12
+ def http_clone_url ## use clone_url( http: true ) -- why? why not?
13
+ ## check: use https: as default? for github - http:// still supported? or redirected?
14
+ "http://github.com/#{@owner}/#{@name}"
15
+ end
16
+
17
+ def git_dir
18
+ ## todo: rename to use bare_git_dir or mirror_dir or something ??
19
+ "#{@name}.git"
20
+ end
21
+
22
+
23
+ def backup_with_retries( dest_dir, retries: 2 )
24
+ retries_count = 0
25
+ success = false
26
+ begin
27
+ success = backup( dest_dir )
28
+ retries_count += 1
29
+ end until success || retries_count >= retries
30
+ success ## return if success or not (true/false)
31
+ end
32
+
33
+ def backup( dest_dir )
34
+ ###
35
+ ## use --mirror
36
+ ## use -n (--no-checkout) -- needed - why? why not?
37
+
38
+ Dir.chdir( dest_dir ) do
39
+ if Dir.exist?( git_dir )
40
+ Dir.chdir( git_dir ) do
41
+ Git.remote_update
42
+ end
43
+ else
44
+ Git.mirror( http_clone_url )
45
+ end
46
+ end
47
+ true ## return true ## success/ok
48
+ rescue GitError => ex
49
+ puts "*** error: #{ex.message}"
50
+
51
+ File.open( './errors.log', 'a' ) do |f|
52
+ f.write "#{Time.now} -- repo #{@owner}/#{@name} - #{ex.message}\n"
53
+ end
54
+ false ## return false ## error/nok
55
+ end ## method backup
56
+
57
+ end ## class Repo
58
+
59
+ end ## module Gitti
60
+
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+
3
+ module Gitti
4
+
5
+ class GitRepoSet ## todo: rename to Hash/Dict/List/Map ??
6
+
7
+ def self.from_file( path )
8
+ hash = YAML.load_file( path )
9
+ self.new( hash )
10
+ end
11
+
12
+
13
+ def initialize( hash )
14
+ @hash = hash
15
+ end
16
+
17
+ def each
18
+ @hash.each do |key_with_counter,values|
19
+
20
+ ## remove optional number from key e.g.
21
+ ## mrhydescripts (3) => mrhydescripts
22
+ ## footballjs (4) => footballjs
23
+ ## etc.
24
+
25
+ key = key_with_counter.sub( /\s+\([0-9]+\)/, '' )
26
+
27
+ puts " -- #{key_with_counter} [#{key}] --"
28
+
29
+ yield( key, values )
30
+ end
31
+ end
32
+
33
+ end ## class GitRepoSet
34
+
35
+ end ## module Gitti
36
+
@@ -1,11 +1,10 @@
1
1
  # encoding: utf-8
2
2
 
3
- module Gitti
4
- module GitBackup
3
+ module GittiBackup
5
4
 
6
5
  MAJOR = 0 ## todo: namespace inside version or something - why? why not??
7
- MINOR = 0
8
- PATCH = 1
6
+ MINOR = 1
7
+ PATCH = 0
9
8
  VERSION = [MAJOR,MINOR,PATCH].join('.')
10
9
 
11
10
  def self.version
@@ -20,6 +19,5 @@ module Gitti
20
19
  "#{File.expand_path( File.dirname(File.dirname(File.dirname(File.dirname(__FILE__)))) )}"
21
20
  end
22
21
 
23
- end # module GitBackup
24
- end # module Gitti
22
+ end # module GittiBackup
25
23
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitti-backup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
@@ -66,6 +66,9 @@ files:
66
66
  - README.md
67
67
  - Rakefile
68
68
  - lib/gitti/backup.rb
69
+ - lib/gitti/backup/backup.rb
70
+ - lib/gitti/backup/repo.rb
71
+ - lib/gitti/backup/reposet.rb
69
72
  - lib/gitti/backup/version.rb
70
73
  homepage: https://github.com/rubylibs/gitti
71
74
  licenses: