p4tools 0.1.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.
- data/Gemfile +5 -0
- data/Gemfile.lock +14 -0
- data/bin/p4tools +5 -0
- data/lib/commands/move.rb +80 -0
- data/lib/commands/revert.rb +29 -0
- data/lib/commands/shelve.rb +53 -0
- data/lib/config/README +1 -0
- data/lib/p4_tools.rb +88 -0
- data/lib/p4tools/environment.rb +18 -0
- data/lib/p4tools/p4_delegate.rb +13 -0
- data/lib/p4tools/parsers/command_entry.rb +11 -0
- data/lib/p4tools/parsers/command_options.rb +32 -0
- data/lib/p4tools/parsers/command_parser.rb +78 -0
- data/lib/p4tools/parsers/trollop_custom.rb +842 -0
- data/lib/p4tools/utils/command_utils.rb +37 -0
- data/lib/p4tools/utils/utils.rb +15 -0
- data/lib/p4tools/utils/validators/shelve_validator.rb +39 -0
- data/lib/p4tools/utils/window_manager.rb +18 -0
- data/p4tools.gemspec +15 -0
- metadata +80 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'validators/shelve_validator'
|
2
|
+
|
3
|
+
module P4Tools
|
4
|
+
module CommandUtils
|
5
|
+
|
6
|
+
# @param [Integer] changelist
|
7
|
+
# @param [Boolean] check_diff
|
8
|
+
# @return [Boolean]
|
9
|
+
def all_files_shelved?(changelist, check_diff=false)
|
10
|
+
validator = ShelveValidator.new(changelist, check_diff)
|
11
|
+
validator.valid?
|
12
|
+
end
|
13
|
+
|
14
|
+
# @param [Integer] changelist
|
15
|
+
# @return [Boolean]
|
16
|
+
def empty_changelist?(changelist)
|
17
|
+
p4 = P4Tools.connection
|
18
|
+
opened_files = p4.run(%W{ describe -s #{changelist} })[0]['depotFile']
|
19
|
+
opened_files.nil?
|
20
|
+
end
|
21
|
+
|
22
|
+
# @param [String] description
|
23
|
+
# @return [String]
|
24
|
+
# The number of the new changelist
|
25
|
+
def create_new_changelist(description='Created with P4Tools.')
|
26
|
+
p4 = P4Tools.connection
|
27
|
+
|
28
|
+
p4.input = {
|
29
|
+
'Change' => 'new',
|
30
|
+
'Description' => description,
|
31
|
+
}
|
32
|
+
|
33
|
+
confirmation = p4.run('change', '-i').first
|
34
|
+
confirmation.match(/\d+/)[0]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module P4Tools
|
2
|
+
module Utils
|
3
|
+
# @param [String] string
|
4
|
+
# @return [String]
|
5
|
+
def self.classify(string)
|
6
|
+
string.gsub(/(^|_)(.)/) { $2.upcase }
|
7
|
+
end
|
8
|
+
|
9
|
+
# @param [String] string
|
10
|
+
def self.require_original(file)
|
11
|
+
require COMMANDS_ROOT + File::SEPARATOR + File.basename(file)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module P4Tools
|
2
|
+
class ShelveValidator
|
3
|
+
|
4
|
+
def initialize(changelist, check_diff)
|
5
|
+
@changelist = changelist
|
6
|
+
@check_diff = check_diff
|
7
|
+
end
|
8
|
+
|
9
|
+
# @return [Boolean]
|
10
|
+
def valid?
|
11
|
+
@p4 = P4Tools.connection
|
12
|
+
@opened_files = @p4.run(%W{ describe -s #{@changelist} })[0]['depotFile']
|
13
|
+
@shelved_files = @p4.run(%W{ describe -s -S #{@changelist} })[0]['depotFile']
|
14
|
+
|
15
|
+
@opened_files.nil? || (!@shelved_files.nil? && all_opened_files_shelved? && files_are_identical?)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# @return [Boolean]
|
21
|
+
def all_opened_files_shelved?
|
22
|
+
(@opened_files - @shelved_files).empty?
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [Boolean]
|
26
|
+
def files_are_identical?
|
27
|
+
if @check_diff
|
28
|
+
intersection = @shelved_files & @opened_files
|
29
|
+
|
30
|
+
intersection.each do |file|
|
31
|
+
diff = @p4.run(%W{ diff -Od #{file}@=#{@changelist} })
|
32
|
+
return false unless diff.empty?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
true
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module P4Tools
|
2
|
+
module WindowManager
|
3
|
+
def self.refresh
|
4
|
+
try_require
|
5
|
+
|
6
|
+
window = RAutomation::Window.new(:title => /Perforce P4V/i)
|
7
|
+
window.send_keys(:f5) if window.exist?
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.try_require
|
11
|
+
begin
|
12
|
+
require 'rautomation'
|
13
|
+
rescue
|
14
|
+
raise(LoadError, "To use this module please install the 'rautomation' gem, version '0.14.1'. It might not work with other versions. Use command: 'gem install rautomation -v 0.14.1'")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/p4tools.gemspec
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
Gem::Specification.new do |gem|
|
2
|
+
gem.name = 'p4tools'
|
3
|
+
gem.version = '0.1.1'
|
4
|
+
|
5
|
+
gem.author = ['Norbert Csibra']
|
6
|
+
gem.email = 'napispam@gmail.com'
|
7
|
+
gem.homepage = 'https://github.com/ncsibra/P4Tools'
|
8
|
+
gem.summary = 'Simple command line tool to run custom perforce commands.'
|
9
|
+
gem.description = %q{Simple command line tool to run custom perforce commands. }
|
10
|
+
gem.files = `git ls-files`.split($/).delete_if {|file| file =~ %r{^gem/|^lib/commands/custom/}}
|
11
|
+
gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
12
|
+
gem.require_paths = ["lib"]
|
13
|
+
|
14
|
+
gem.add_runtime_dependency('P4Ruby-mingwx86', "~> 2014.1")
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: p4tools
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Norbert Csibra
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-04-22 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: P4Ruby-mingwx86
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2014.1'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '2014.1'
|
30
|
+
description: ! 'Simple command line tool to run custom perforce commands. '
|
31
|
+
email: napispam@gmail.com
|
32
|
+
executables:
|
33
|
+
- p4tools
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- Gemfile
|
38
|
+
- Gemfile.lock
|
39
|
+
- bin/p4tools
|
40
|
+
- lib/commands/move.rb
|
41
|
+
- lib/commands/revert.rb
|
42
|
+
- lib/commands/shelve.rb
|
43
|
+
- lib/config/README
|
44
|
+
- lib/p4_tools.rb
|
45
|
+
- lib/p4tools/environment.rb
|
46
|
+
- lib/p4tools/p4_delegate.rb
|
47
|
+
- lib/p4tools/parsers/command_entry.rb
|
48
|
+
- lib/p4tools/parsers/command_options.rb
|
49
|
+
- lib/p4tools/parsers/command_parser.rb
|
50
|
+
- lib/p4tools/parsers/trollop_custom.rb
|
51
|
+
- lib/p4tools/utils/command_utils.rb
|
52
|
+
- lib/p4tools/utils/utils.rb
|
53
|
+
- lib/p4tools/utils/validators/shelve_validator.rb
|
54
|
+
- lib/p4tools/utils/window_manager.rb
|
55
|
+
- p4tools.gemspec
|
56
|
+
homepage: https://github.com/ncsibra/P4Tools
|
57
|
+
licenses: []
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 1.8.28
|
77
|
+
signing_key:
|
78
|
+
specification_version: 3
|
79
|
+
summary: Simple command line tool to run custom perforce commands.
|
80
|
+
test_files: []
|