p4util 0.1.1 → 0.1.3

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: 8e13e10a9b31fb12e34d23ee7f6495eca21ce5e6
4
- data.tar.gz: 2bf3006c190afaf1d19d0c2e216c6812d585f28f
3
+ metadata.gz: a0edf6cc773707c1a4980752d791f5411f02d26d
4
+ data.tar.gz: 989fb3cc701d1211c69c7f3c64e28325f6381750
5
5
  SHA512:
6
- metadata.gz: 621d7626122bd7e2517191a45570c6f0e62bc93ecbb989f4f61cd475b4236c37259c624fad705e208b30897810a095b148383edae583eea109cb5e4988b6c936
7
- data.tar.gz: d8882a9dedc2b56fa15f4ea1a3fc6c81181785b5542548c57546060eff3e0a17f0bd53fbe6dfd46920e237f60eabe67fb28839004ba1da0e1ef5341935a451e8
6
+ metadata.gz: b32a53524ad0e06c7f551ebeb7a8c77ec4da03bfad69880f53fb0e98635fa94642dda0a7a45c4a7582e38a831a0b29fc631f01e9f075fa1decdea31b5139f06b
7
+ data.tar.gz: fdad9a5c160ab074d20dda40c8fe9a3d9f7d441d795dbfdadff68c3a54fa8b5c5ac0010d9938101018dc947b1e350f47305e09d3962bc1f648f362dabebf48f7
data/README.md CHANGED
@@ -35,6 +35,8 @@ Or install it yourself as:
35
35
 
36
36
  ## Changes
37
37
 
38
+ * 0.1.2: Added depot model and the ability to customize the view for changelists
39
+
38
40
  * 0.1.1: Added documentation for Rake tasks and version string output
39
41
 
40
42
  * 0.1.0: Added `p4util init` command that can do some common p4d configurations,
data/Rakefile CHANGED
@@ -1,7 +1,10 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rdoc/task'
3
+ require 'rake/clean'
3
4
 
4
5
  RDoc::Task.new do |rdoc|
5
6
  rdoc.main = 'README.md'
6
7
  rdoc.rdoc_files.include('README.md', 'lib/**/*.rb')
7
- end
8
+ end
9
+
10
+ CLEAN.include('pkg')
@@ -8,7 +8,7 @@ module Commands
8
8
  class ChangelistModel < InitModel
9
9
  include Commands::Init::P4Helpers
10
10
 
11
- inheritable_attributes :description, :adds, :edits, :user
11
+ inheritable_attributes :description, :adds, :edits, :user, :view
12
12
 
13
13
  # Please make this descriptive
14
14
  @description = 'Init changelist'
@@ -23,6 +23,9 @@ module Commands
23
23
  # user
24
24
  @user = nil
25
25
 
26
+ # Don't use the default //depot/... mapping, use this instead
27
+ @view = nil
28
+
26
29
  #========================================================================
27
30
  # Internal implementation
28
31
  #========================================================================
@@ -31,13 +34,14 @@ module Commands
31
34
  true
32
35
  end
33
36
 
34
- attr_accessor :description, :adds, :edits, :user
37
+ attr_accessor :description, :adds, :edits, :user, :view
35
38
 
36
39
  def initialize
37
40
  @description = self.class.description
38
41
  @adds = self.class.adds
39
42
  @edits = self.class.edits
40
43
  @user = self.class.user
44
+ @view = self.class.view
41
45
  end
42
46
 
43
47
  def execute(p4, models, super_user)
@@ -51,6 +55,9 @@ module Commands
51
55
  options[:olduser] = super_user.login
52
56
  options[:oldpass] = super_user.password
53
57
  end
58
+ if view
59
+ options[:view] = view
60
+ end
54
61
 
55
62
  # Define the logic of what the changelist model really does: make adds
56
63
  # and edits for the most part
@@ -61,6 +68,8 @@ module Commands
61
68
  results = p4.save_change(change_spec)
62
69
  change_id = results[0].gsub(/^Change (\d+) created./, '\1')
63
70
 
71
+ puts "Preparing changelist #{change_id} with #{@adds.length} adds and #{@edits.length} edits"
72
+
64
73
  @adds.each do |add|
65
74
  add_path = File.join(client_path, add.path)
66
75
  dir = File.dirname(add_path)
@@ -74,12 +83,14 @@ module Commands
74
83
  elsif add.local_path
75
84
  FileUtils.copy(add.local_path, add_path)
76
85
  end
77
- p4.run_add('-c', change_id, add_path)
86
+ results = p4.run_add('-c', change_id, add_path)
87
+ puts "Added file #{add_path} to #{change_id}: #{results}"
78
88
  end
79
89
 
80
90
  @edits.each do |edit|
81
91
  edit_path = File.join(client_path, edit.path)
82
- p4.run_edit('-c', change_id, edit_path)
92
+ results = p4.run_edit('-c', change_id, edit_path)
93
+ puts "Editing file #{edit_path} on #{change_id}: #{results}"
83
94
 
84
95
  if edit.content
85
96
  IO.write(edit_path, edit.content)
@@ -0,0 +1,60 @@
1
+ require 'commands/init/init_model'
2
+ require 'commands/init/p4_helpers'
3
+
4
+ module Commands
5
+ module Init
6
+
7
+ class DepotModel < InitModel
8
+ include Commands::Init::P4Helpers
9
+
10
+ inheritable_attributes :depot, :description, :type, :address, :suffix, :map, :spec_map
11
+
12
+ # The depot name
13
+ @depot = nil
14
+
15
+ @description = 'Init depot'
16
+
17
+ @type = 'local'
18
+
19
+ @address = nil
20
+
21
+ @suffix = nil
22
+
23
+ @map = 'depot/...'
24
+
25
+ @spec_map = nil
26
+
27
+ #========================================================================
28
+ # Internal implementation
29
+ #========================================================================
30
+
31
+ def self.abstract
32
+ true
33
+ end
34
+
35
+ attr_accessor :depot, :description, :type, :address, :suffix, :map, :spec_map
36
+
37
+ def initialize
38
+ @depot = self.class.depot
39
+ @description = self.class.description
40
+ @type = self.class.type
41
+ @address = self.class.address
42
+ @suffix = self.class.suffix
43
+ @map = self.class.map
44
+ @spec_map = self.class.spec_map
45
+ end
46
+
47
+ def execute(p4, models=nil, super_user=nil)
48
+ d = p4.fetch_depot(depot)
49
+ d._depot = depot
50
+ d._description = description if description
51
+ d._type = type if type
52
+ d._address = address if address
53
+ d._suffix = suffix if suffix
54
+ d._map = map if map
55
+ d._spec_map = spec_map if spec_map
56
+ p4.save_depot(d)
57
+ end
58
+ end
59
+ end
60
+ end
@@ -81,6 +81,9 @@ module Commands
81
81
 
82
82
  models.sort! { |a, b| a.rank <=> b.rank }
83
83
 
84
+ # Clear out any P4 Environment variables
85
+ ENV.keys.select { |x| x =~ /^P4/ }.each { |x| ENV.delete(x) }
86
+
84
87
  p4 = P4.new
85
88
  p4.port = p4port
86
89
  p4.connect
@@ -44,7 +44,11 @@ module Commands
44
44
  spec._root = dir
45
45
  spec._client = name
46
46
  spec._description = 'p4util init temp client'
47
- spec._view = ["//depot/... //#{name}/depot/..."]
47
+ if options.key?(:view)
48
+ spec._view = options[:view].map { |x| x.gsub("${name}", name) }
49
+ else
50
+ spec._view = ["//depot/... //#{name}/depot/..."]
51
+ end
48
52
 
49
53
  p4.save_client(spec)
50
54
 
@@ -4,7 +4,7 @@ module Commands
4
4
  module Init
5
5
 
6
6
  class UserModel < InitModel
7
- inheritable_attributes :login, :full_name, :password, :email, :super
7
+ inheritable_attributes :login, :full_name, :password, :email, :super, :skip
8
8
 
9
9
  @login = nil
10
10
  @full_name = nil
@@ -15,6 +15,12 @@ module Commands
15
15
  # protections entry for this user exists
16
16
  @super = false
17
17
 
18
+ # Set this to true if you actually just want to use this username/password
19
+ # combination and expect that the user actually exists in the system
20
+ # already. This basically allows us to use the same definition for
21
+ # existing users in initialization scripts.
22
+ @skip = false
23
+
18
24
  #========================================================================
19
25
  # Internal implementation - don't mess with this
20
26
  #========================================================================
@@ -59,16 +65,20 @@ module Commands
59
65
  end
60
66
 
61
67
  def execute(p4, models=nil, super_user=nil)
68
+ return if self.class.skip
69
+
70
+ puts "user: #{to_spec} as #{p4.user}"
71
+
62
72
  p4.save_user(to_spec, '-f')
63
73
 
64
74
  p4.user = login
65
- p4.password = ''
75
+ p4.password = '' if password
66
76
 
67
77
  p4.run_password('', password) if password
68
78
 
69
79
  if super_user
70
80
  p4.user = super_user.login
71
- p4.password = super_user.password
81
+ p4.password = super_user.password if super_user.password
72
82
  end
73
83
  end
74
84
  end
data/lib/commands/init.rb CHANGED
@@ -2,6 +2,7 @@
2
2
  require 'commands/start'
3
3
  require 'commands/init/init_model'
4
4
  require 'commands/init/changelist_model'
5
+ require 'commands/init/depot_model'
5
6
  require 'commands/init/file_definition'
6
7
  require 'commands/init/system_settings_model'
7
8
  require 'commands/init/user_model'
@@ -10,9 +11,25 @@ module Commands
10
11
 
11
12
  def Commands.init(options=nil)
12
13
  init_dir = 'p4init'
13
- # TODO we may want to allow this to be overridden, though I find this a
14
- # spurious and dangerous use case
14
+
15
15
  p4port = '127.0.0.1:1666'
16
+ version = nil
17
+
18
+ if options and !options.params.empty?
19
+
20
+ op = OptionParser.new do |op|
21
+ op.on('-p PORT', '--port PORT', 'P4PORT setting') { |x| p4port = x }
22
+ op.on('-v VERSION', '--version VERSION', 'ftp.perforce.com version') do |v|
23
+ version = v
24
+ end
25
+ end
26
+
27
+ op.parse!(options.params)
28
+
29
+ if !options.params.empty?
30
+ init_dir = options.params.first
31
+ end
32
+ end
16
33
 
17
34
  if options and !options.params.empty?
18
35
  init_dir = options.params.shift
@@ -21,6 +38,8 @@ module Commands
21
38
  if !p4d_running?
22
39
  # The way this works: if you specify any options, like what to download
23
40
  # you must specify the initialization directory.
41
+ options = OpenStruct.new
42
+ options.params = ['--version', version] unless version.nil?
24
43
  Commands.start(options)
25
44
  end
26
45
 
@@ -29,7 +48,7 @@ module Commands
29
48
 
30
49
  def Commands.print_init_help
31
50
  puts <<-END.gsub(/^ {6}/, '')
32
- p4util init [p4_init_dir]
51
+ p4util init [-p P4PORT] [p4_init_dir]
33
52
 
34
53
  Reads definitions in the directory p4_init_dir - by default, just
35
54
  'p4init' - and then calls methods on a p4d instance assumed to be running
@@ -134,6 +153,22 @@ module Commands
134
153
  as your super user, so set this to a UserModel instance that should exist
135
154
  at this point.
136
155
 
156
+ ## DepotModel ##
157
+
158
+ Example creating a new standard depot:
159
+
160
+ class ProjectDepot < DepotModel
161
+ def rank
162
+ 1001
163
+ end
164
+ @depot = 'my_project'
165
+ @description = 'The My Project depot'
166
+ end
167
+
168
+ Other attributes that can be set that update the depot spec being written:
169
+
170
+ :type, :address, :suffix, :map, :spec_map
171
+
137
172
  END
138
173
  end
139
174
 
data/lib/commands/kill.rb CHANGED
@@ -1,16 +1,16 @@
1
1
  require 'commands/util'
2
- require 'sys/proctable'
3
-
4
- include Sys
5
2
 
6
3
  module Commands
7
4
 
8
5
  def Commands.kill(options=nil)
9
- ProcTable.ps().find_all{|p| p.comm =~ /p4d/}.each do |p|
6
+ list_process_names.select{|p| p =~ /p4d/}.each do |p|
7
+ pid = pid_for_process(p)
10
8
  begin
11
- Process.kill('TERM', p.pid)
12
- rescue
13
- puts "Problem killing #{p}, ignoring"
9
+ puts "killing p4d #{p} at #{pid}"
10
+ Process.kill('TERM', pid)
11
+ rescue Exception => e
12
+ puts "Problem killing #{p}: #{e.message}"
13
+ puts e.backtrace.join('\n')
14
14
  end
15
15
  end
16
16
 
data/lib/commands/util.rb CHANGED
@@ -1,9 +1,31 @@
1
- require 'sys/proctable'
2
1
  require 'P4'
2
+ require 'osutil'
3
3
 
4
4
  module Commands
5
5
  def Commands.p4d_running?
6
- !ProcTable.ps().find_all { |p| p.comm =~ /p4d/ }.empty?
6
+ list_process_names.select { |p| p =~ /p4d/ }.empty? == false
7
+ end
8
+
9
+ def self.list_process_names
10
+ if OsUtil.osx? or OsUtil.linux?
11
+ return `ps aux | awk '{print $11}'`.split(/\n/).drop(1)
12
+ else
13
+ # TODO investigate using tasklist just for this
14
+ raise 'No support for windows just yet'
15
+ end
16
+ end
17
+
18
+ def self.pid_for_process(process)
19
+ if OsUtil.osx? or OsUtil.linux?
20
+ line = `ps aux | awk '{print $2,$11}'`.split(/\n/).drop(1).find { |p| p =~ /#{process}/ }
21
+ unless line.nil?
22
+ return line.split('\n').first.to_i
23
+ else
24
+ return nil
25
+ end
26
+ else
27
+ raise 'NO support for windows yet'
28
+ end
7
29
  end
8
30
 
9
31
  def Commands.p4d_available?(port=':1666')
@@ -1,3 +1,3 @@
1
1
  module P4Util
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.3'
3
3
  end
data/p4util.gemspec CHANGED
@@ -20,7 +20,6 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency 'bundler', '~> 1.7'
22
22
 
23
- spec.add_runtime_dependency 'sys-proctable', '~> 0.9'
24
- spec.add_runtime_dependency 'p4ruby', '2014.2.0.pre1'
23
+ spec.add_runtime_dependency 'p4ruby', '~> 2014.2.0.pre'
25
24
  spec.add_runtime_dependency 'rake', '~> 10.3'
26
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: p4util
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tristan Juricek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-13 00:00:00.000000000 Z
11
+ date: 2015-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -25,33 +25,19 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
- name: sys-proctable
28
+ name: p4ruby
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.9'
33
+ version: 2014.2.0.pre
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.9'
41
- - !ruby/object:Gem::Dependency
42
- name: p4ruby
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '='
46
- - !ruby/object:Gem::Version
47
- version: 2014.2.0.pre1
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '='
53
- - !ruby/object:Gem::Version
54
- version: 2014.2.0.pre1
40
+ version: 2014.2.0.pre
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -86,6 +72,7 @@ files:
86
72
  - "./lib/commands/help.rb"
87
73
  - "./lib/commands/init.rb"
88
74
  - "./lib/commands/init/changelist_model.rb"
75
+ - "./lib/commands/init/depot_model.rb"
89
76
  - "./lib/commands/init/file_definition.rb"
90
77
  - "./lib/commands/init/init_model.rb"
91
78
  - "./lib/commands/init/p4_helpers.rb"