git-confident 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -69,6 +69,7 @@ an entire folder to backup. You can track a whole folder using a .gcrecusrive fi
69
69
  = Alternatives
70
70
 
71
71
  * rsync
72
+ * http://eigenclass.org/hiki/gibak-0.3.0
72
73
  * gitback[http://github.com/brycethornton/gitback] - very similar to this project, but sets up the repository from a config file.
73
74
  * Desktop backup systems
74
75
  * Time machine (on OS X)
@@ -8,28 +8,63 @@ $:.unshift( LIB_PATH )
8
8
  require 'git/confident'
9
9
 
10
10
  options = {
11
- :action => :backup,
12
11
  :path => File.expand_path( Dir::pwd ) # Default to current directory
13
12
  }
14
13
 
15
- OptionParser.new do | opts |
16
- opts.banner = "Usage: #{ $0 } [options]"
14
+ def usage
15
+ puts @opts.to_s
16
+ exit 0
17
+ end
18
+
19
+ @opts = OptionParser.new do | opts |
20
+ opts.banner = "Usage: #{ $0 } [options] [FILES]"
21
+
22
+ opts.separator ""
23
+ opts.separator "Actions:"
24
+
25
+ opts.on("-b", "--backup", "Copy tracked files to the repository, commit changes and push") do
26
+ options[ :action ] = :backup
27
+ end
17
28
 
18
29
  opts.on("-C", "--no-commit", "Only copy files, do not do a git commit") do
30
+ options[ :action ] = :backup
19
31
  options[ :no_commit ] = true
20
32
  end
21
33
 
34
+ opts.on("-d", "--diff", "Show differences between file system and repository") do
35
+ options[ :action ] = :diff
36
+ end
37
+
22
38
  opts.on("-l", "--list", "List all files in the repository") do
23
39
  options[ :action ] = :list
24
40
  end
25
41
 
42
+ opts.on("-r", "--restore", "Restore system files from the repository") do
43
+ options[ :action ] = :restore
44
+ end
45
+
46
+ opts.on("-h", "--help", "Show usage") do
47
+ usage
48
+ end
49
+
50
+ opts.separator ""
51
+ opts.separator "Other options:"
52
+
26
53
  opts.on("-p", "--path PATH", "The path to the local copy of the repository. Defaults to current directory") do | path |
27
54
  options[ :path ] = File.expand_path( path )
28
55
  end
29
56
 
30
- opts.on("-r", "--restore", "Restore system files from the repository") do
31
- options[ :action ] = :restore
32
- end
33
- end.parse!
57
+ opts.separator ""
58
+ opts.separator "FILES:"
59
+ opts.separator "Files are given with their repository path."
60
+ opts.separator "E.g. a file that resides in /home/user/my_file"
61
+ opts.separator " has a repository path of home/user/my_file"
62
+ end
63
+
64
+ @opts.parse!
65
+
66
+ usage if options[ :action ].nil?
67
+
68
+ options[ :files ] = ARGV.clone if ARGV.size > 0
34
69
 
35
70
  Git::Confident.new( options )
@@ -9,8 +9,8 @@ module Git
9
9
  module VERSION #:nodoc:
10
10
  MAJOR = 0
11
11
  MINOR = 0
12
- TINY = 7
13
-
12
+ TINY = 8
13
+
14
14
  STRING = [ MAJOR, MINOR, TINY ].join( '.' )
15
15
  end
16
16
 
@@ -18,6 +18,7 @@ module Git
18
18
 
19
19
  def initialize( options )
20
20
  @path = options[ :path ].clone
21
+ @files = options[ :files ]
21
22
  @no_commit = options[ :no_commit ] ? true : false
22
23
 
23
24
  raise "Git repository not found at '#{ @path }'" if ! File.directory?( "#{ @path }/.git" )
@@ -28,20 +29,25 @@ module Git
28
29
  case options[ :action ]
29
30
  when :backup
30
31
  backup
32
+ when :diff
33
+ diff
31
34
  when :list
32
- puts "Files:"
33
- puts @elements.files
34
- puts "Folders:"
35
- puts @elements.folders
36
- puts "Ignored:"
37
- puts @elements.ignored
35
+ list
38
36
  when :restore
39
37
  restore
40
- end
38
+ end
41
39
  end
42
40
 
43
41
  private
44
42
 
43
+ def file_list
44
+ if @files
45
+ @files
46
+ else
47
+ @elements.files + @elements.folders
48
+ end
49
+ end
50
+
45
51
  def backup
46
52
  local_backup
47
53
  return if @no_commit
@@ -49,15 +55,32 @@ module Git
49
55
  push
50
56
  end
51
57
 
58
+ def diff
59
+ file_list.each do | pathname |
60
+ s = `diff -U 2 #{ @path }/#{ pathname } /#{ pathname }`
61
+ puts s unless s.empty?
62
+ end
63
+ end
64
+
65
+ def list
66
+ @elements = Git::Elements.new( @path )
67
+ puts "Files:"
68
+ puts @elements.files
69
+ puts "Folders:"
70
+ puts @elements.folders
71
+ puts "Ignored:"
72
+ puts @elements.ignored
73
+ end
74
+
52
75
  def restore
53
76
  IO.popen( "rsync --no-perms --executability --keep-dirlinks --delete --files-from=- #{ @path }/ /", "w+" ) do | pipe |
54
- (@elements.files + @elements.folders).each { | pathname | pipe.puts pathname }
77
+ file_list.each { | pathname | pipe.puts pathname }
55
78
  end
56
79
  end
57
80
 
58
81
  def local_backup
59
- IO.popen( "rsync -a --recursive --delete --files-from=- / #{ @path }/", "w+" ) do | pipe |
60
- (@elements.files + @elements.folders).each { | pathname | pipe.puts pathname }
82
+ IO.popen( "rsync -a --recursive --copy-dirlinks --delete --files-from=- / #{ @path }/", "w+" ) do | pipe |
83
+ file_list.each { | pathname | pipe.puts pathname }
61
84
  end
62
85
  end
63
86
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-confident
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 7
10
- version: 0.0.7
9
+ - 8
10
+ version: 0.0.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Joe Yates
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-18 00:00:00 +01:00
18
+ date: 2011-07-21 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency