gitdis 0.1.1.1 → 0.1.2.1
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 +4 -4
- data/VERSION +1 -1
- data/bin/gitdis +9 -5
- data/lib/gitdis.rb +40 -23
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dff5d4e19798bf4fa0087e9a97affdc2b60cb5ff
|
4
|
+
data.tar.gz: 9d3133897f4a68c1de7298615e6d9a50ac7ed39b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc9c1c81e4b3ccd76df7259f01bbd8970ed18770a0f53d8d1631a236c0d460a3adcba521a42660c19db323232581b4a89432ab4b68d1a460062f79ab8eeb6078
|
7
|
+
data.tar.gz: f48060d031e6b1865ce3f7f771e64889f8bf924a7748801a1dd50022ff6526336715a5617a86fe09ebff18b9a1932f30e77104913ab6858a176d4da7ffa588a8
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2.1
|
data/bin/gitdis
CHANGED
@@ -16,6 +16,7 @@ opts = Slop.parse { |o|
|
|
16
16
|
o.string '-r', '--git-repo', 'path/to/repo_dir'
|
17
17
|
o.string '-b', '--git-branch', 'e.g. master'
|
18
18
|
o.separator ' Other options'
|
19
|
+
o.bool '--dry-run', 'Perform comparisons but do not write to Redis'
|
19
20
|
o.bool '-D', '--dump', 'Just dump Redis contents per YAML keymap'
|
20
21
|
o.on '-h', '--help' do
|
21
22
|
puts o
|
@@ -71,6 +72,7 @@ if opts.dump?
|
|
71
72
|
GitDis.dump(keymap.keys, redis_options)
|
72
73
|
else
|
73
74
|
gd = GitDis.new(config.fetch('git-repo'), redis_options)
|
75
|
+
gd.dry_run = true if opts[:'dry-run']
|
74
76
|
gd.git_pull config.fetch('git-branch')
|
75
77
|
|
76
78
|
keymap.each { |key, fileglob|
|
@@ -80,12 +82,14 @@ else
|
|
80
82
|
puts "#{fileglob} not found"
|
81
83
|
when false
|
82
84
|
puts "#{fileglob} unchanged"
|
85
|
+
when true
|
86
|
+
puts "#{fileglob} changed but not updated (DRY RUN)"
|
87
|
+
when Array
|
88
|
+
ver, md5 = *result
|
89
|
+
puts "#{fileglob} updated:"
|
90
|
+
puts "\tVersion: #{ver} (#{md5})"
|
83
91
|
else
|
84
|
-
|
85
|
-
ver, md5 = *result
|
86
|
-
puts "#{fileglob} updated:"
|
87
|
-
puts "\tVersion: #{ver} (#{md5})"
|
88
|
-
end
|
92
|
+
raise "unknown update result: #{result.inspect}"
|
89
93
|
end
|
90
94
|
}
|
91
95
|
end
|
data/lib/gitdis.rb
CHANGED
@@ -48,9 +48,45 @@ class GitDis
|
|
48
48
|
}
|
49
49
|
end
|
50
50
|
|
51
|
-
|
51
|
+
# concatenate file contents into a single string
|
52
|
+
# separate by newlines, including CRs if any CRs are detected anywhere
|
53
|
+
# include a filetype-specific separator if recognized
|
54
|
+
# filenames is an array, and all lengths 0-N are handled
|
55
|
+
def self.concatenate(filenames)
|
56
|
+
filetypes = filenames.map { |fname| File.extname(fname) }.uniq
|
57
|
+
case filetypes.length
|
58
|
+
when 0
|
59
|
+
return "" if filenames.length == 0
|
60
|
+
raise "filetype detection failure: #{filenames}"
|
61
|
+
when 1
|
62
|
+
sep = self.separator(filetypes.first)
|
63
|
+
else
|
64
|
+
raise "refusing to concatenate disparate filetypes: #{filetypes}"
|
65
|
+
end
|
66
|
+
|
67
|
+
payload = filenames.map { |fname|
|
68
|
+
contents = File.read(fname) || raise("could not read #{fname}")
|
69
|
+
sep << "\r" if !sep.include?("\r") and contents.include?("\r")
|
70
|
+
contents if !contents.empty?
|
71
|
+
}.compact.join("#{sep}\n")
|
72
|
+
end
|
73
|
+
|
74
|
+
# return a specific separator for known filetypes
|
75
|
+
# e.g. yaml document separator: ---
|
76
|
+
def self.separator(filetype)
|
77
|
+
filetype = filetype[1..-1] if filetype[0] == '.'
|
78
|
+
case filetype.downcase
|
79
|
+
when 'yaml', 'yml'
|
80
|
+
'---'
|
81
|
+
else
|
82
|
+
''
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
attr_accessor :repo_dir, :redis, :dry_run
|
52
87
|
|
53
88
|
def initialize(repo_dir, redis_options = {})
|
89
|
+
@dry_run = false
|
54
90
|
@repo_dir = File.expand_path(repo_dir)
|
55
91
|
raise "#{@repo_dir} does not exist!" unless Dir.exist? @repo_dir
|
56
92
|
@redis = Redis.new(redis_options)
|
@@ -68,6 +104,7 @@ class GitDis
|
|
68
104
|
end
|
69
105
|
|
70
106
|
# quick false if calculated md5 == redis md5
|
107
|
+
# return true if dry run and update needed
|
71
108
|
# otherwise update contents and md5; increment version
|
72
109
|
def update_redis(base_key, file_contents)
|
73
110
|
md5 = Digest::MD5.hexdigest(file_contents)
|
@@ -75,7 +112,6 @@ class GitDis
|
|
75
112
|
return false if @redis.get(mkey) == md5
|
76
113
|
|
77
114
|
if @dry_run
|
78
|
-
puts "DRY RUN: would have updated #{base_key} with md5 #{md5}"
|
79
115
|
true
|
80
116
|
else
|
81
117
|
@redis.set(fkey, file_contents)
|
@@ -88,6 +124,7 @@ class GitDis
|
|
88
124
|
# e.g. update('foo:bar:baz', 'foo/bar/*.baz')
|
89
125
|
# return nil # path does not exist
|
90
126
|
# false # no update needed
|
127
|
+
# true # update was needed, but just a dry run
|
91
128
|
# [ver, md5] # updated
|
92
129
|
def update(base_key, relpath)
|
93
130
|
# handle e.g. "foo/bar/*.yaml"
|
@@ -95,27 +132,7 @@ class GitDis
|
|
95
132
|
case files.length
|
96
133
|
when 0 then nil
|
97
134
|
when 1 then self.update_redis(base_key, File.read(files.first))
|
98
|
-
else
|
99
|
-
puts "concatenating #{files.length} files"
|
100
|
-
sep = "\n"
|
101
|
-
|
102
|
-
payload = files.map { |fname|
|
103
|
-
contents = File.read(fname)
|
104
|
-
if contents and !contents.empty?
|
105
|
-
# scan for carriage returns (Microsoft text format)
|
106
|
-
sep = "\r\n" if sep == "\n" and contents.include?("\r")
|
107
|
-
contents
|
108
|
-
# debugging
|
109
|
-
elsif contents
|
110
|
-
puts "#{fname} is empty"
|
111
|
-
nil
|
112
|
-
else
|
113
|
-
puts "File.read(#{fname}) returned false/nil"
|
114
|
-
nil
|
115
|
-
end
|
116
|
-
}.compact.join("---#{sep}")
|
117
|
-
|
118
|
-
self.update_redis(base_key, payload)
|
135
|
+
else self.update_redis(base_key, self.class.concatenate(files))
|
119
136
|
end
|
120
137
|
end
|
121
138
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitdis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rick Hull
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slop
|