mgmt 0.2.4 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/mgmt +53 -35
  3. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 62f2f2cff1dc34a1c4d37b606104527601ca9042
4
- data.tar.gz: 20f47572148e83d7ff478ac99479a42660d24551
3
+ metadata.gz: e0dca341a6b2e3e10a68e4801180d0ccffa6765c
4
+ data.tar.gz: d49f1de8ae327fc31b5ad1c521ea4c341ff7ff82
5
5
  SHA512:
6
- metadata.gz: 9ae773b0085436a2e90eadaebf37127fd886d7f48446af9ad7b39fa18a0a57721d9cbace6bec6cb121fda000dccf3e7dda8c91267b42eecde886640fb12a7d61
7
- data.tar.gz: acd0d1c66635dd41fed5326ce2ec950e8467a3623415519c6f9468ce15234ecc332259618fb119b4d79d3e1095095585f8d6bf33f5197aa160b43b3113260118
6
+ metadata.gz: cf018f3223b6f6ebde93cfcb515aa7e1022b57c4e8d890366baabb7fa8c984cfcb89fc0255208c1e49a6266e7aa0502d129ac5a822df9eb84c3a8da678c05480
7
+ data.tar.gz: d2c5a7a62dd93fd5ce5ae3e690bb20294e6e87833b19385516722d57a382740b65f19964b989db7ff08853816c9c4f7c918f093b66542d1a8732ccfc77328e82
data/bin/mgmt CHANGED
@@ -9,7 +9,7 @@ module MGMT
9
9
  DEPSFILE = "Gopherfile"
10
10
  LOCKFILE = "Gopherfile.lock"
11
11
  VENDOR = ".vendor"
12
- VERSION = "0.2.4"
12
+ VERSION = "0.3.0"
13
13
 
14
14
  def xputs(code, msg)
15
15
  code = nil if ENV['TERM'] != "xterm"
@@ -23,6 +23,12 @@ module MGMT
23
23
  system(cmd) || abort("Failed to execute command: #{cmd}")
24
24
  end
25
25
 
26
+ def shv(cmd)
27
+ value = `#{cmd}`
28
+ abort "Failed to execute command: #{cmd}" unless $?.success?
29
+ value.strip
30
+ end
31
+
26
32
  def abort(msg)
27
33
  xputs "31", ">>> #{msg}"
28
34
  Kernel.exit(1)
@@ -31,8 +37,8 @@ module MGMT
31
37
  def read
32
38
  abort "#{DEPSFILE} not found" unless File.exist?(DEPSFILE)
33
39
 
34
- deps = Deps.parse(DEPSFILE)
35
- deps.merge! Deps.parse(LOCKFILE) if File.exist?(LOCKFILE)
40
+ deps = Deps.parse(DEPSFILE, :tag)
41
+ deps.merge! Deps.parse(LOCKFILE, :rev) if File.exist?(LOCKFILE)
36
42
  deps
37
43
  end
38
44
 
@@ -40,11 +46,24 @@ module MGMT
40
46
  deps.each do |dep|
41
47
  MGMT.xputs "33", "### #{dep.name}"
42
48
  if dep.pull!
43
- MGMT.xputs nil, " now at ##{dep.tag}"
49
+ MGMT.xputs nil, " now at ##{dep.version}"
44
50
  end
45
51
  end
46
52
  end
47
53
 
54
+ def update(deps, updates)
55
+ versions = {}
56
+ updates.each do |str|
57
+ name, rev = str.split("#", 2)
58
+ versions[name] = rev
59
+ end
60
+ deps.select do |dep|
61
+ versions.include?(dep.name)
62
+ end.each do |dep|
63
+ dep.rev = versions[dep.name]
64
+ end
65
+ end
66
+
48
67
  def lock(deps)
49
68
  deps.lock!
50
69
  MGMT.xputs "32", "=== #{LOCKFILE} written"
@@ -52,15 +71,15 @@ module MGMT
52
71
 
53
72
  def exec(*c)
54
73
  ENV['GOPATH'] = "#{File.expand_path(VENDOR, ".")}:#{ENV['GOPATH']}"
55
- Kernel.exec *c
74
+ Kernel.exec(*c)
56
75
  end
57
76
 
58
77
  class Deps < Array
59
78
 
60
- def self.parse(file)
79
+ def self.parse(file, field)
61
80
  deps = []
62
81
  File.read(file).each_line do |line|
63
- deps.push Dep.parse(line)
82
+ deps.push Dep.parse(line, field)
64
83
  end
65
84
  new deps.compact
66
85
  end
@@ -69,28 +88,20 @@ module MGMT
69
88
  detect {|i| i.name == name }
70
89
  end
71
90
 
72
- def filter(names)
73
- self.class.new select {|i| names.include?(i.name) }
74
- end
75
-
76
- def reset!
77
- each do |dep|
78
- dep.tag = nil
79
- end
91
+ def select
92
+ self.class.new(super)
80
93
  end
81
94
 
82
95
  def merge!(locked)
83
96
  each do |dep|
84
- next if dep.tag
85
-
86
- match = locked.find(dep.name)
87
- dep.tag = match.tag if match
97
+ match = locked.find(dep.name)
98
+ dep.rev = match.rev if match
88
99
  end
89
100
  end
90
101
 
91
102
  def lock!
92
103
  temp = Tempfile.new LOCKFILE
93
- each {|d| temp.puts d.to_s }
104
+ each {|dep| temp.puts dep.to_s }
94
105
  temp.close
95
106
  FileUtils.mv temp.path, LOCKFILE
96
107
  end
@@ -99,7 +110,7 @@ module MGMT
99
110
 
100
111
  class Dep
101
112
 
102
- def self.parse(line)
113
+ def self.parse(line, field)
103
114
  line = line.strip
104
115
  return if line[0] == "#"
105
116
 
@@ -112,18 +123,19 @@ module MGMT
112
123
  when "!", 33
113
124
  opts[:repo] = token[1..-1]
114
125
  when "#", 35
115
- opts[:tag] = token[1..-1]
126
+ opts[field] = token[1..-1]
116
127
  end
117
128
  end
118
129
  new tokens[0], opts
119
130
  end
120
131
 
121
132
  attr_reader :name, :repo
122
- attr_accessor :tag
133
+ attr_accessor :tag, :rev
123
134
 
124
135
  def initialize(name, opts = {})
125
136
  @name = name
126
- @tag = opts[:tag]
137
+ @tag = opts[:tag] # Specified tag
138
+ @rev = opts[:rev] # Locked rev
127
139
  @repo = opts[:repo] || "http://#{name}"
128
140
  end
129
141
 
@@ -131,22 +143,29 @@ module MGMT
131
143
  @target ||= File.join(VENDOR, 'src', @name)
132
144
  end
133
145
 
146
+ def version
147
+ @rev || @tag || 'master'
148
+ end
149
+
134
150
  def pull!
135
- skip = false
136
- if File.directory?(target)
137
- skip = @tag && @tag == `cd #{target} && git --git-dir=.git log -n 1 --pretty=format:'%h'`.strip
138
- MGMT.sh "cd #{target} && git --git-dir=.git fetch -q --all" unless skip
139
- else
151
+ current = MGMT.shv("cd #{target} && git --git-dir=.git log -n 1 --pretty=format:'%h'") if File.directory?(target)
152
+ return false if current && current == rev
153
+
154
+ if current.nil?
140
155
  MGMT.sh "git clone -q #{@repo} #{target}"
156
+ else
157
+ MGMT.sh "cd #{target} && git --git-dir=.git fetch -q origin"
141
158
  end
142
159
 
143
- @tag ||= `cd #{target} && git --git-dir=.git log -n 1 --pretty=format:'%h'`.strip
144
- MGMT.sh "cd #{target} && git --git-dir=.git reset -q --hard #{@tag}" unless skip
145
- !skip
160
+ remote = "origin/#{version}"
161
+ @rev = MGMT.shv "cd #{target} && git --git-dir=.git show-ref -q #{remote} && git --git-dir=.git rev-parse --short #{remote} || git --git-dir=.git rev-parse --short #{version}"
162
+
163
+ MGMT.sh "cd #{target} && git --git-dir=.git reset -q --hard #{rev}"
164
+ true
146
165
  end
147
166
 
148
167
  def to_s
149
- "#{@name} ##{@tag} !#{@repo}"
168
+ "#{@name} ##{version} !#{@repo}"
150
169
  end
151
170
  end
152
171
  end
@@ -162,9 +181,8 @@ when "go"
162
181
  MGMT.exec "go", *ARGV
163
182
  when "update"
164
183
  deps = MGMT.read
165
- some = deps.filter(ARGV)
184
+ some = MGMT.update(deps, ARGV)
166
185
  unless some.empty?
167
- some.reset!
168
186
  MGMT.pull(some)
169
187
  MGMT.lock(deps)
170
188
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mgmt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitrij Denissenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-04 00:00:00.000000000 Z
11
+ date: 2015-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -57,8 +57,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
57
57
  version: '0'
58
58
  requirements: []
59
59
  rubyforge_project:
60
- rubygems_version: 2.4.5
60
+ rubygems_version: 2.4.6
61
61
  signing_key:
62
62
  specification_version: 4
63
63
  summary: a minimalistic, self-contained, massively opinionated dependency manager
64
64
  test_files: []
65
+ has_rdoc: