Dahistory 0.3.1 → 0.4.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.
- data/Dahistory.gemspec +1 -1
- data/README.md +45 -4
- data/lib/Dahistory/version.rb +1 -1
- data/lib/Dahistory.rb +21 -0
- data/spec/main.rb +33 -8
- data/spec/tests/Dashistory.rb +56 -0
- metadata +18 -2
data/Dahistory.gemspec
CHANGED
data/README.md
CHANGED
@@ -15,20 +15,22 @@ Installation
|
|
15
15
|
|
16
16
|
gem 'Dahistory'
|
17
17
|
|
18
|
-
|
18
|
+
Useage
|
19
19
|
------
|
20
20
|
|
21
|
-
|
21
|
+
# In your Chef-Solo recipe or your Ruby code...
|
22
22
|
|
23
|
+
require "Dahistory"
|
24
|
+
|
23
25
|
Dahistory "some/file.txt"
|
24
26
|
|
25
27
|
# Checks your directory (default "./history").
|
26
28
|
# If not found there, saves copy of file in ./pending dir and
|
27
29
|
# raises Dahistory::Pending_File, "pending/HOSTNAME,path,some,file.txt.TIMESTAMP"
|
28
|
-
|
30
|
+
#
|
29
31
|
# You review the file,
|
30
32
|
# move the file from the pending directory to your source/history dir, and
|
31
|
-
#
|
33
|
+
# run your recipe/code again.
|
32
34
|
|
33
35
|
Override the default settings:
|
34
36
|
|
@@ -49,6 +51,45 @@ Both **def Dahistory** and **class Dahistory** are defined.
|
|
49
51
|
All the code is in one file and less than 150 lines:
|
50
52
|
[lib/Dahistory.rb](https://github.com/da99/Dahistory/blob/master/lib/Dahistory.rb)
|
51
53
|
|
54
|
+
Useage: Dahistory + Git
|
55
|
+
-----------------------
|
56
|
+
|
57
|
+
Dahistory has some methods that can be used as shortcuts when using git.
|
58
|
+
|
59
|
+
Dahistory { |o|
|
60
|
+
|
61
|
+
o.file "some/file.txt"
|
62
|
+
|
63
|
+
o.git_add_commit
|
64
|
+
|
65
|
+
# ... is a shortcut for:
|
66
|
+
o.on_raise_pending {
|
67
|
+
`git add #{o.backup_file}`
|
68
|
+
`git commit -m "Backup: #{o.backup_file}"`
|
69
|
+
}
|
70
|
+
|
71
|
+
}
|
72
|
+
|
73
|
+
`git_push` does the same above, but with "git push":
|
74
|
+
|
75
|
+
o.git_add_commit_push
|
76
|
+
|
77
|
+
# or...
|
78
|
+
o.git_add_commit_push 'my_remote my_branch'
|
79
|
+
|
80
|
+
You can specify the git repo:
|
81
|
+
|
82
|
+
Dahistory { |o|
|
83
|
+
|
84
|
+
o.file "some/file.txt"
|
85
|
+
|
86
|
+
Dir.chdir("/path/to/project") {
|
87
|
+
o.git_add_commit
|
88
|
+
# or...
|
89
|
+
o.git_add_commit_push
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
52
93
|
Run Tests
|
53
94
|
---------
|
54
95
|
|
data/lib/Dahistory/version.rb
CHANGED
data/lib/Dahistory.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'Dahistory/version'
|
2
|
+
require 'Exit_Zero'
|
2
3
|
|
3
4
|
def Dahistory file = nil
|
4
5
|
da = Dahistory.new { |o|
|
@@ -17,6 +18,7 @@ class Dahistory
|
|
17
18
|
module Base
|
18
19
|
|
19
20
|
def initialize file_path = nil
|
21
|
+
@git = false
|
20
22
|
@file = nil
|
21
23
|
file!(file_path) if file_path
|
22
24
|
dirs './history'
|
@@ -84,6 +86,14 @@ class Dahistory
|
|
84
86
|
@backup_file = str
|
85
87
|
end
|
86
88
|
|
89
|
+
def git_add_commit
|
90
|
+
@git = :commit
|
91
|
+
end
|
92
|
+
|
93
|
+
def git_add_commit_push args = ""
|
94
|
+
@git = args
|
95
|
+
end
|
96
|
+
|
87
97
|
def save
|
88
98
|
|
89
99
|
content = File.read(file)
|
@@ -93,6 +103,17 @@ class Dahistory
|
|
93
103
|
|
94
104
|
if !old
|
95
105
|
File.write(backup_file, content) unless self.class.find_file_copy(file, pending_dir)
|
106
|
+
|
107
|
+
|
108
|
+
if @git
|
109
|
+
Exit_Zero "git add #{backup_file}"
|
110
|
+
Exit_Zero %! git commit -m "Backup: #{backup_file}"!
|
111
|
+
end
|
112
|
+
|
113
|
+
if @git.is_a?(String)
|
114
|
+
Exit_Zero %! git push #{@git} !
|
115
|
+
end
|
116
|
+
|
96
117
|
on_raise_pending.call if on_raise_pending
|
97
118
|
raise Pending, backup_file
|
98
119
|
end
|
data/spec/main.rb
CHANGED
@@ -12,18 +12,43 @@ def chdir
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def reset_dirs
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
Exit_Zero "rm -rf #{FOLDER}"
|
16
|
+
Exit_Zero "mkdir #{FOLDER}"
|
17
|
+
Exit_Zero "mkdir #{FOLDER}/files"
|
18
|
+
Exit_Zero "mkdir #{FOLDER}/history"
|
19
|
+
Exit_Zero "mkdir #{FOLDER}/history/blue"
|
20
|
+
Exit_Zero "mkdir #{FOLDER}/history/red"
|
21
|
+
Exit_Zero "mkdir #{FOLDER}/history/yellow"
|
22
|
+
Exit_Zero "mkdir #{FOLDER}/pending"
|
23
23
|
end
|
24
24
|
|
25
25
|
reset_dirs
|
26
26
|
|
27
|
+
shared( "git" ) {
|
28
|
+
|
29
|
+
before {
|
30
|
+
@proj = "#{FOLDER}/project_#{rand 1000}"
|
31
|
+
@git_repo = "#{@proj}.git"
|
32
|
+
Exit_Zero "mkdir -p #{@git_repo}"
|
33
|
+
Exit_Zero "cd #{@git_repo} && git init --bare"
|
34
|
+
Exit_Zero "mkdir -p #{@proj}"
|
35
|
+
|
36
|
+
Dir.chdir(@proj) {
|
37
|
+
Exit_Zero "mkdir files"
|
38
|
+
Exit_Zero "mkdir history"
|
39
|
+
Exit_Zero "mkdir pending"
|
40
|
+
Exit_Zero "git init"
|
41
|
+
Exit_Zero "git remote add origin #{@git_repo}"
|
42
|
+
Exit_Zero "touch README.md"
|
43
|
+
Exit_Zero "git add ."
|
44
|
+
Exit_Zero %! git commit -m "First commit." !
|
45
|
+
Exit_Zero "git push -u origin master"
|
46
|
+
}
|
47
|
+
@file = "files/#{rand 1000}.txt"
|
48
|
+
}
|
49
|
+
|
50
|
+
}
|
51
|
+
|
27
52
|
# ======== Include the tests.
|
28
53
|
if ARGV.size > 1 && ARGV[1, ARGV.size - 1].detect { |a| File.exists?(a) }
|
29
54
|
# Do nothing. Bacon grabs the file.
|
data/spec/tests/Dashistory.rb
CHANGED
@@ -84,3 +84,59 @@ describe "Dahistory: existing file in ./history" do
|
|
84
84
|
|
85
85
|
end # === Dahistory: existing file in ./history
|
86
86
|
|
87
|
+
describe "Dahistory :git_add_commit" do
|
88
|
+
|
89
|
+
behaves_like "git"
|
90
|
+
|
91
|
+
it "adds backup file as a commit" do
|
92
|
+
target = nil
|
93
|
+
|
94
|
+
Dir.chdir(@proj) {
|
95
|
+
File.write @file, @file
|
96
|
+
Dahistory { |o|
|
97
|
+
o.file @file
|
98
|
+
o.git_add_commit
|
99
|
+
target = "Backup: #{o.backup_file}"
|
100
|
+
} rescue nil
|
101
|
+
|
102
|
+
Exit_Zero('git log -n 1 --oneline --decorate=short')
|
103
|
+
.out[target].should == target
|
104
|
+
}
|
105
|
+
end
|
106
|
+
|
107
|
+
end # === Dahistory :git_add_commit
|
108
|
+
|
109
|
+
describe "Dahistory :git_add_commit_push" do
|
110
|
+
|
111
|
+
behaves_like "git"
|
112
|
+
|
113
|
+
it "pushs git repo to remote" do
|
114
|
+
target = "Backup: #{@file}"
|
115
|
+
|
116
|
+
Dir.chdir(@proj) {
|
117
|
+
File.write @file, @file
|
118
|
+
Dahistory { |o|
|
119
|
+
o.file @file
|
120
|
+
o.git_add_commit_push
|
121
|
+
} rescue nil
|
122
|
+
|
123
|
+
Exit_Zero('git push 2>&1').out["Everything up-to-date"].should == "Everything up-to-date"
|
124
|
+
}
|
125
|
+
end
|
126
|
+
|
127
|
+
it "passes argument to 'git push'" do
|
128
|
+
target = "Backup: #{@file}"
|
129
|
+
|
130
|
+
Dir.chdir(@proj) {
|
131
|
+
File.write @file, @file
|
132
|
+
should.raise(Exit_Zero::Non_Zero) {
|
133
|
+
Dahistory { |o|
|
134
|
+
o.file @file
|
135
|
+
o.git_add_commit_push "old_remote someting"
|
136
|
+
}
|
137
|
+
}.message.should.match %r!'old_remote' does not appear to be a git repository!
|
138
|
+
}
|
139
|
+
end
|
140
|
+
|
141
|
+
end # === Dahistory :git_add_commit_push
|
142
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Dahistory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bacon
|
@@ -75,6 +75,22 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: Exit_Zero
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
78
94
|
description: Compares file to other files in specified dir(s) and backups if it does
|
79
95
|
not exist.
|
80
96
|
email:
|