git-multirepo 1.0.0.beta70 → 1.0.0.beta71

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.
Files changed (72) hide show
  1. checksums.yaml +5 -5
  2. data/.gitattributes +4 -4
  3. data/.gitbugtraq +3 -3
  4. data/.gitignore +38 -38
  5. data/.rspec +2 -2
  6. data/.rubocop.yml +79 -79
  7. data/CHANGELOG.md +116 -112
  8. data/Gemfile +4 -4
  9. data/Gemfile.lock +47 -47
  10. data/LICENSE +22 -22
  11. data/README.md +178 -178
  12. data/Rakefile +1 -1
  13. data/bin/multi +11 -11
  14. data/docs/bug-repros/91565510-repro.sh +20 -20
  15. data/git-multirepo.gemspec +31 -31
  16. data/lib/git-multirepo.rb +3 -3
  17. data/lib/multirepo/commands/add-command.rb +55 -55
  18. data/lib/multirepo/commands/branch-command.rb +88 -88
  19. data/lib/multirepo/commands/checkout-command.rb +127 -127
  20. data/lib/multirepo/commands/clone-command.rb +68 -68
  21. data/lib/multirepo/commands/command.rb +87 -87
  22. data/lib/multirepo/commands/commands.rb +14 -14
  23. data/lib/multirepo/commands/do-command.rb +101 -101
  24. data/lib/multirepo/commands/init-command.rb +121 -121
  25. data/lib/multirepo/commands/inspect-command.rb +48 -48
  26. data/lib/multirepo/commands/install-command.rb +170 -170
  27. data/lib/multirepo/commands/merge-command.rb +249 -249
  28. data/lib/multirepo/commands/open-command.rb +55 -55
  29. data/lib/multirepo/commands/remove-command.rb +48 -48
  30. data/lib/multirepo/commands/uninit-command.rb +18 -18
  31. data/lib/multirepo/commands/update-command.rb +112 -112
  32. data/lib/multirepo/config.rb +19 -19
  33. data/lib/multirepo/files/config-entry.rb +39 -39
  34. data/lib/multirepo/files/config-file.rb +52 -52
  35. data/lib/multirepo/files/lock-entry.rb +29 -29
  36. data/lib/multirepo/files/lock-file.rb +62 -62
  37. data/lib/multirepo/files/meta-file.rb +51 -51
  38. data/lib/multirepo/files/tracking-file.rb +9 -9
  39. data/lib/multirepo/files/tracking-files.rb +64 -64
  40. data/lib/multirepo/git/branch.rb +32 -32
  41. data/lib/multirepo/git/change.rb +11 -11
  42. data/lib/multirepo/git/commit.rb +7 -7
  43. data/lib/multirepo/git/git-runner.rb +56 -56
  44. data/lib/multirepo/git/git.rb +10 -10
  45. data/lib/multirepo/git/ref.rb +38 -38
  46. data/lib/multirepo/git/remote.rb +17 -17
  47. data/lib/multirepo/git/repo.rb +131 -131
  48. data/lib/multirepo/hooks/post-commit-hook.rb +23 -23
  49. data/lib/multirepo/hooks/pre-commit-hook.rb +35 -35
  50. data/lib/multirepo/info.rb +5 -5
  51. data/lib/multirepo/logic/dependency.rb +6 -6
  52. data/lib/multirepo/logic/merge-descriptor.rb +95 -95
  53. data/lib/multirepo/logic/node.rb +75 -75
  54. data/lib/multirepo/logic/performer.rb +62 -62
  55. data/lib/multirepo/logic/repo-selection.rb +25 -25
  56. data/lib/multirepo/logic/revision-selection.rb +15 -15
  57. data/lib/multirepo/logic/revision-selector.rb +23 -23
  58. data/lib/multirepo/logic/version-comparer.rb +10 -10
  59. data/lib/multirepo/multirepo-exception.rb +6 -6
  60. data/lib/multirepo/output/extra-output.rb +12 -12
  61. data/lib/multirepo/output/teamcity-extra-output.rb +11 -11
  62. data/lib/multirepo/utility/console.rb +52 -52
  63. data/lib/multirepo/utility/popen-runner.rb +27 -27
  64. data/lib/multirepo/utility/system-runner.rb +14 -14
  65. data/lib/multirepo/utility/utils.rb +107 -107
  66. data/lib/multirepo/utility/verbosity.rb +6 -6
  67. data/resources/.gitconfig +2 -2
  68. data/resources/post-commit +0 -0
  69. data/resources/pre-commit +0 -0
  70. data/spec/integration/init_spec.rb +19 -19
  71. data/spec/spec_helper.rb +89 -89
  72. metadata +3 -3
@@ -1,19 +1,19 @@
1
- require "singleton"
2
-
3
- module MultiRepo
4
- class Config
5
- include Singleton
6
-
7
- attr_accessor :verbose
8
- @verbose = false
9
-
10
- attr_accessor :running_git_hook
11
- @running_git_hook = false
12
-
13
- attr_accessor :git_executable
14
- @git_executable = nil
15
-
16
- attr_accessor :extra_output
17
- @extra_output = nil
18
- end
19
- end
1
+ require "singleton"
2
+
3
+ module MultiRepo
4
+ class Config
5
+ include Singleton
6
+
7
+ attr_accessor :verbose
8
+ @verbose = false
9
+
10
+ attr_accessor :running_git_hook
11
+ @running_git_hook = false
12
+
13
+ attr_accessor :git_executable
14
+ @git_executable = nil
15
+
16
+ attr_accessor :extra_output
17
+ @extra_output = nil
18
+ end
19
+ end
@@ -1,39 +1,39 @@
1
- require "securerandom"
2
-
3
- require "multirepo/utility/console"
4
- require "multirepo/git/repo"
5
-
6
- module MultiRepo
7
- class ConfigEntry
8
- attr_accessor :id
9
- attr_accessor :path
10
- attr_accessor :url
11
- attr_accessor :repo
12
-
13
- def encode_with(coder)
14
- coder["id"] = @id
15
- coder["path"] = @path
16
- coder["url"] = @url
17
- end
18
-
19
- def initialize(repo)
20
- @id = SecureRandom.uuid
21
- @path = repo.path
22
- @url = repo.exists? ? repo.remote('origin').url : nil
23
- end
24
-
25
- def ==(other)
26
- other_path = Pathname.new(other.path)
27
- self_path = Pathname.new(path)
28
- other_path.exist? && self_path.exist? && other_path.realpath == self_path.realpath
29
- end
30
-
31
- def repo
32
- Repo.new(path)
33
- end
34
-
35
- def name
36
- repo.basename
37
- end
38
- end
39
- end
1
+ require "securerandom"
2
+
3
+ require "multirepo/utility/console"
4
+ require "multirepo/git/repo"
5
+
6
+ module MultiRepo
7
+ class ConfigEntry
8
+ attr_accessor :id
9
+ attr_accessor :path
10
+ attr_accessor :url
11
+ attr_accessor :repo
12
+
13
+ def encode_with(coder)
14
+ coder["id"] = @id
15
+ coder["path"] = @path
16
+ coder["url"] = @url
17
+ end
18
+
19
+ def initialize(repo)
20
+ @id = SecureRandom.uuid
21
+ @path = repo.path
22
+ @url = repo.exists? ? repo.remote('origin').url : nil
23
+ end
24
+
25
+ def ==(other)
26
+ other_path = Pathname.new(other.path)
27
+ self_path = Pathname.new(path)
28
+ other_path.exist? && self_path.exist? && other_path.realpath == self_path.realpath
29
+ end
30
+
31
+ def repo
32
+ Repo.new(path)
33
+ end
34
+
35
+ def name
36
+ repo.basename
37
+ end
38
+ end
39
+ end
@@ -1,52 +1,52 @@
1
- require "fileutils"
2
- require "pathname"
3
-
4
- require_relative "config-entry"
5
-
6
- module MultiRepo
7
- class ConfigFile
8
- FILENAME = ".multirepo"
9
-
10
- def initialize(path)
11
- @path = path
12
- end
13
-
14
- def file
15
- File.join(@path, FILENAME)
16
- end
17
-
18
- def filename
19
- FILENAME
20
- end
21
-
22
- def exists?
23
- File.exist?(file)
24
- end
25
-
26
- def load_entries
27
- ensure_access(file, "Can't read config file (permissions)") { |stat| stat.readable? }
28
- Psych.load(File.read(file))
29
- end
30
-
31
- def save_entries(entries)
32
- ensure_access(file, "Can't write config file (permissions)") { |stat| stat.writable? }
33
- File.write(file, Psych.dump(entries))
34
- end
35
-
36
- def entry_exists?(entry)
37
- load_entries.any? { |e| e == entry }
38
- end
39
-
40
- def add_entry(entry)
41
- save_entries(load_entries.push(entry))
42
- end
43
-
44
- def remove_entry(entry)
45
- save_entries(load_entries.delete_if { |e| e == entry })
46
- end
47
-
48
- def ensure_access(file, error_message, &check)
49
- fail MultiRepoException, error_message if File.exists?(file) && !check.call(File.stat(file))
50
- end
51
- end
52
- end
1
+ require "fileutils"
2
+ require "pathname"
3
+
4
+ require_relative "config-entry"
5
+
6
+ module MultiRepo
7
+ class ConfigFile
8
+ FILENAME = ".multirepo"
9
+
10
+ def initialize(path)
11
+ @path = path
12
+ end
13
+
14
+ def file
15
+ File.join(@path, FILENAME)
16
+ end
17
+
18
+ def filename
19
+ FILENAME
20
+ end
21
+
22
+ def exists?
23
+ File.exist?(file)
24
+ end
25
+
26
+ def load_entries
27
+ ensure_access(file, "Can't read config file (permissions)") { |stat| stat.readable? }
28
+ Psych.load(File.read(file))
29
+ end
30
+
31
+ def save_entries(entries)
32
+ ensure_access(file, "Can't write config file (permissions)") { |stat| stat.writable? }
33
+ File.write(file, Psych.dump(entries))
34
+ end
35
+
36
+ def entry_exists?(entry)
37
+ load_entries.any? { |e| e == entry }
38
+ end
39
+
40
+ def add_entry(entry)
41
+ save_entries(load_entries.push(entry))
42
+ end
43
+
44
+ def remove_entry(entry)
45
+ save_entries(load_entries.delete_if { |e| e == entry })
46
+ end
47
+
48
+ def ensure_access(file, error_message, &check)
49
+ fail MultiRepoException, error_message if File.exists?(file) && !check.call(File.stat(file))
50
+ end
51
+ end
52
+ end
@@ -1,29 +1,29 @@
1
- require "multirepo/utility/console"
2
- require "multirepo/git/repo"
3
-
4
- module MultiRepo
5
- class LockEntry
6
- attr_accessor :name
7
- attr_accessor :id
8
- attr_accessor :head
9
- attr_accessor :branch
10
-
11
- def encode_with(coder)
12
- coder["name"] = @name
13
- coder["id"] = @id
14
- coder["head"] = @head
15
- coder["branch"] = @branch
16
- end
17
-
18
- def initialize(config_entry)
19
- @name = config_entry.name
20
- @id = config_entry.id
21
-
22
- head = config_entry.repo.head
23
- @head = head.commit_id
24
-
25
- current_branch = config_entry.repo.current_branch
26
- @branch = current_branch ? current_branch.name : nil
27
- end
28
- end
29
- end
1
+ require "multirepo/utility/console"
2
+ require "multirepo/git/repo"
3
+
4
+ module MultiRepo
5
+ class LockEntry
6
+ attr_accessor :name
7
+ attr_accessor :id
8
+ attr_accessor :head
9
+ attr_accessor :branch
10
+
11
+ def encode_with(coder)
12
+ coder["name"] = @name
13
+ coder["id"] = @id
14
+ coder["head"] = @head
15
+ coder["branch"] = @branch
16
+ end
17
+
18
+ def initialize(config_entry)
19
+ @name = config_entry.name
20
+ @id = config_entry.id
21
+
22
+ head = config_entry.repo.head
23
+ @head = head.commit_id
24
+
25
+ current_branch = config_entry.repo.current_branch
26
+ @branch = current_branch ? current_branch.name : nil
27
+ end
28
+ end
29
+ end
@@ -1,62 +1,62 @@
1
- require "pathname"
2
- require "psych"
3
-
4
- require_relative "tracking-file"
5
- require_relative "lock-entry"
6
- require_relative "config-file"
7
-
8
- module MultiRepo
9
- class LockFile < TrackingFile
10
- FILENAME = ".multirepo.lock"
11
-
12
- def initialize(path)
13
- @path = path
14
- end
15
-
16
- def file
17
- File.join(@path, FILENAME)
18
- end
19
-
20
- def filename
21
- FILENAME
22
- end
23
-
24
- def exists?
25
- File.exist?(file)
26
- end
27
-
28
- def load_entries
29
- ensure_access(file, "Can't read lock file (permissions)") { |stat| stat.readable? }
30
- Psych.load(File.read(file))
31
- end
32
-
33
- def update
34
- ensure_access(file, "Can't write lock file (permissions)") { |stat| stat.writable? }
35
- config_entries = ConfigFile.new(@path).load_entries
36
- lock_entries = config_entries.map { |c| LockEntry.new(c) }
37
- content = Psych.dump(lock_entries)
38
- return update_internal(file, content)
39
- end
40
-
41
- def validate!
42
- load_entries.all? { |e| validate_entry! e }
43
- end
44
-
45
- def validate_entry!(entry)
46
- valid = true
47
-
48
- # head
49
- valid &= /\b([a-f0-9]{40})\b/ =~ entry.head.to_s
50
-
51
- # branch
52
- GitRunner.run(@path, "check-ref-format --branch #{entry.branch}", Verbosity::OUTPUT_NEVER)
53
- valid &= (entry.branch == "" || GitRunner.last_command_succeeded)
54
-
55
- return valid
56
- end
57
-
58
- def ensure_access(file, error_message, &check)
59
- fail MultiRepoException, error_message if File.exists?(file) && !check.call(File.stat(file))
60
- end
61
- end
62
- end
1
+ require "pathname"
2
+ require "psych"
3
+
4
+ require_relative "tracking-file"
5
+ require_relative "lock-entry"
6
+ require_relative "config-file"
7
+
8
+ module MultiRepo
9
+ class LockFile < TrackingFile
10
+ FILENAME = ".multirepo.lock"
11
+
12
+ def initialize(path)
13
+ @path = path
14
+ end
15
+
16
+ def file
17
+ File.join(@path, FILENAME)
18
+ end
19
+
20
+ def filename
21
+ FILENAME
22
+ end
23
+
24
+ def exists?
25
+ File.exist?(file)
26
+ end
27
+
28
+ def load_entries
29
+ ensure_access(file, "Can't read lock file (permissions)") { |stat| stat.readable? }
30
+ Psych.load(File.read(file))
31
+ end
32
+
33
+ def update
34
+ ensure_access(file, "Can't write lock file (permissions)") { |stat| stat.writable? }
35
+ config_entries = ConfigFile.new(@path).load_entries
36
+ lock_entries = config_entries.map { |c| LockEntry.new(c) }
37
+ content = Psych.dump(lock_entries)
38
+ return update_internal(file, content)
39
+ end
40
+
41
+ def validate!
42
+ load_entries.all? { |e| validate_entry! e }
43
+ end
44
+
45
+ def validate_entry!(entry)
46
+ valid = true
47
+
48
+ # head
49
+ valid &= /\b([a-f0-9]{40})\b/ =~ entry.head.to_s
50
+
51
+ # branch
52
+ GitRunner.run(@path, "check-ref-format --branch #{entry.branch}", Verbosity::OUTPUT_NEVER)
53
+ valid &= (entry.branch == "" || GitRunner.last_command_succeeded)
54
+
55
+ return valid
56
+ end
57
+
58
+ def ensure_access(file, error_message, &check)
59
+ fail MultiRepoException, error_message if File.exists?(file) && !check.call(File.stat(file))
60
+ end
61
+ end
62
+ end
@@ -1,51 +1,51 @@
1
- require "pathname"
2
- require "psych"
3
-
4
- require "multirepo/info"
5
- require_relative "tracking-file"
6
- require_relative "lock-entry"
7
- require_relative "config-file"
8
-
9
- module MultiRepo
10
- class MetaFile < TrackingFile
11
- FILENAME = ".multirepo.meta"
12
-
13
- attr_accessor :version
14
-
15
- def initialize(path)
16
- @path = path
17
- @version = MultiRepo::VERSION
18
- end
19
-
20
- def file
21
- File.join(@path, FILENAME)
22
- end
23
-
24
- def filename
25
- FILENAME
26
- end
27
-
28
- def exists?
29
- File.exist?(file)
30
- end
31
-
32
- def encode_with(coder)
33
- coder["version"] = @version
34
- end
35
-
36
- def load
37
- ensure_access(file, "Can't read meta file (permissions)") { |stat| stat.readable? }
38
- Psych.load(File.read(file))
39
- end
40
-
41
- def update
42
- ensure_access(file, "Can't write meta file (permissions)") { |stat| stat.writable? }
43
- content = Psych.dump(self)
44
- return update_internal(file, content)
45
- end
46
-
47
- def ensure_access(file, error_message, &check)
48
- fail MultiRepoException, error_message if File.exists?(file) && !check.call(File.stat(file))
49
- end
50
- end
51
- end
1
+ require "pathname"
2
+ require "psych"
3
+
4
+ require "multirepo/info"
5
+ require_relative "tracking-file"
6
+ require_relative "lock-entry"
7
+ require_relative "config-file"
8
+
9
+ module MultiRepo
10
+ class MetaFile < TrackingFile
11
+ FILENAME = ".multirepo.meta"
12
+
13
+ attr_accessor :version
14
+
15
+ def initialize(path)
16
+ @path = path
17
+ @version = MultiRepo::VERSION
18
+ end
19
+
20
+ def file
21
+ File.join(@path, FILENAME)
22
+ end
23
+
24
+ def filename
25
+ FILENAME
26
+ end
27
+
28
+ def exists?
29
+ File.exist?(file)
30
+ end
31
+
32
+ def encode_with(coder)
33
+ coder["version"] = @version
34
+ end
35
+
36
+ def load
37
+ ensure_access(file, "Can't read meta file (permissions)") { |stat| stat.readable? }
38
+ Psych.load(File.read(file))
39
+ end
40
+
41
+ def update
42
+ ensure_access(file, "Can't write meta file (permissions)") { |stat| stat.writable? }
43
+ content = Psych.dump(self)
44
+ return update_internal(file, content)
45
+ end
46
+
47
+ def ensure_access(file, error_message, &check)
48
+ fail MultiRepoException, error_message if File.exists?(file) && !check.call(File.stat(file))
49
+ end
50
+ end
51
+ end