git-multirepo 1.0.0.beta39 → 1.0.0.beta40

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -2
  3. data/.gitbugtraq +3 -3
  4. data/.gitignore +38 -38
  5. data/.multirepo.meta +2 -2
  6. data/.rspec +2 -2
  7. data/Gemfile +4 -4
  8. data/Gemfile.lock +42 -42
  9. data/LICENSE +22 -22
  10. data/README.md +146 -145
  11. data/Rakefile +2 -2
  12. data/bin/multi +10 -10
  13. data/docs/bug-repros/91565510-repro.sh +20 -20
  14. data/git-multirepo.gemspec +31 -31
  15. data/lib/commands.rb +15 -14
  16. data/lib/git-multirepo.rb +2 -2
  17. data/lib/info.rb +4 -4
  18. data/lib/multirepo/commands/add-command.rb +53 -53
  19. data/lib/multirepo/commands/branch-command.rb +82 -82
  20. data/lib/multirepo/commands/checkout-command.rb +122 -122
  21. data/lib/multirepo/commands/clean-command.rb +31 -31
  22. data/lib/multirepo/commands/clone-command.rb +70 -70
  23. data/lib/multirepo/commands/command.rb +75 -75
  24. data/lib/multirepo/commands/do-command.rb +76 -0
  25. data/lib/multirepo/commands/fetch-command.rb +30 -30
  26. data/lib/multirepo/commands/graph-command.rb +45 -45
  27. data/lib/multirepo/commands/init-command.rb +119 -119
  28. data/lib/multirepo/commands/install-command.rb +103 -103
  29. data/lib/multirepo/commands/merge-command.rb +167 -167
  30. data/lib/multirepo/commands/open-command.rb +57 -57
  31. data/lib/multirepo/commands/remove-command.rb +50 -50
  32. data/lib/multirepo/commands/uninit-command.rb +20 -20
  33. data/lib/multirepo/commands/update-command.rb +60 -60
  34. data/lib/multirepo/config.rb +15 -15
  35. data/lib/multirepo/files/config-entry.rb +38 -38
  36. data/lib/multirepo/files/config-file.rb +45 -45
  37. data/lib/multirepo/files/lock-entry.rb +24 -24
  38. data/lib/multirepo/files/lock-file.rb +38 -38
  39. data/lib/multirepo/files/meta-file.rb +40 -40
  40. data/lib/multirepo/files/tracking-file.rb +8 -8
  41. data/lib/multirepo/files/tracking-files.rb +46 -46
  42. data/lib/multirepo/git/branch.rb +30 -30
  43. data/lib/multirepo/git/change.rb +10 -10
  44. data/lib/multirepo/git/commit.rb +17 -17
  45. data/lib/multirepo/git/git-runner.rb +46 -46
  46. data/lib/multirepo/git/remote.rb +16 -16
  47. data/lib/multirepo/git/repo.rb +77 -77
  48. data/lib/multirepo/hooks/post-commit-hook.rb +22 -22
  49. data/lib/multirepo/hooks/pre-commit-hook.rb +31 -31
  50. data/lib/multirepo/logic/merge-descriptor.rb +12 -12
  51. data/lib/multirepo/logic/node.rb +44 -44
  52. data/lib/multirepo/logic/performer.rb +62 -62
  53. data/lib/multirepo/logic/revision-selector.rb +34 -34
  54. data/lib/multirepo/multirepo-exception.rb +5 -5
  55. data/lib/multirepo/utility/console.rb +51 -51
  56. data/lib/multirepo/utility/runner.rb +34 -34
  57. data/lib/multirepo/utility/utils.rb +81 -81
  58. data/resources/.gitconfig +2 -2
  59. data/resources/post-commit +5 -5
  60. data/resources/pre-commit +5 -5
  61. data/spec/integration/init_spec.rb +18 -18
  62. data/spec/spec_helper.rb +89 -89
  63. metadata +4 -3
@@ -1,58 +1,58 @@
1
- require "os"
2
-
3
- require "multirepo/utility/console"
4
- require "multirepo/utility/utils"
5
-
6
- module MultiRepo
7
- class OpenCommand < Command
8
- self.command = "open"
9
- self.summary = "Opens repositories in the OS's file explorer."
10
-
11
- def self.options
12
- [
13
- ['[--main]', 'Open the main repository.'],
14
- ['[--all]', 'Open the main repository and all dependencies.'],
15
- ].concat(super)
16
- end
17
-
18
- def initialize(argv)
19
- @main_only = argv.flag?("main")
20
- @all = argv.flag?("all")
21
- super
22
- end
23
-
24
- def validate!
25
- super
26
- unless validate_only_one_flag(@main_only, @all)
27
- help! "You can't provide more than one operation modifier (--deps, --main, etc.)"
28
- end
29
- end
30
-
31
- def run
32
- super
33
- ensure_in_work_tree
34
- ensure_multirepo_enabled
35
-
36
- if @main_only
37
- open_main
38
- elsif @all
39
- open_dependencies
40
- open_main
41
- else
42
- open_dependencies
43
- end
44
- rescue MultiRepoException => e
45
- Console.log_error(e.message)
46
- end
47
-
48
- def open_main
49
- Utils.reveal_in_default_file_browser(".")
50
- end
51
-
52
- def open_dependencies
53
- ConfigFile.new(".").load_entries.each do |entry|
54
- Utils.reveal_in_default_file_browser(entry.repo.path)
55
- end
56
- end
57
- end
1
+ require "os"
2
+
3
+ require "multirepo/utility/console"
4
+ require "multirepo/utility/utils"
5
+
6
+ module MultiRepo
7
+ class OpenCommand < Command
8
+ self.command = "open"
9
+ self.summary = "Opens repositories in the OS's file explorer."
10
+
11
+ def self.options
12
+ [
13
+ ['[--main]', 'Open the main repository.'],
14
+ ['[--all]', 'Open the main repository and all dependencies.'],
15
+ ].concat(super)
16
+ end
17
+
18
+ def initialize(argv)
19
+ @main_only = argv.flag?("main")
20
+ @all = argv.flag?("all")
21
+ super
22
+ end
23
+
24
+ def validate!
25
+ super
26
+ unless validate_only_one_flag(@main_only, @all)
27
+ help! "You can't provide more than one operation modifier (--deps, --main, etc.)"
28
+ end
29
+ end
30
+
31
+ def run
32
+ super
33
+ ensure_in_work_tree
34
+ ensure_multirepo_enabled
35
+
36
+ if @main_only
37
+ open_main
38
+ elsif @all
39
+ open_dependencies
40
+ open_main
41
+ else
42
+ open_dependencies
43
+ end
44
+ rescue MultiRepoException => e
45
+ Console.log_error(e.message)
46
+ end
47
+
48
+ def open_main
49
+ Utils.reveal_in_default_file_browser(".")
50
+ end
51
+
52
+ def open_dependencies
53
+ ConfigFile.new(".").load_entries.each do |entry|
54
+ Utils.reveal_in_default_file_browser(entry.repo.path)
55
+ end
56
+ end
57
+ end
58
58
  end
@@ -1,51 +1,51 @@
1
- require "multirepo/utility/console"
2
- require "multirepo/files/config-file"
3
-
4
- module MultiRepo
5
- class RemoveCommand < Command
6
- self.command = "remove"
7
- self.summary = "Removes the specified dependency from multirepo."
8
-
9
- def self.options
10
- [
11
- ['<path>', 'The relative path to the dependency to remove (e.g. ../MyOldDependency).'],
12
- ['[--delete]', 'Delete the dependency on disk in addition to removing it from the multirepo config.']
13
- ].concat(super)
14
- end
15
-
16
- def initialize(argv)
17
- @path = argv.shift_argument
18
- @delete = argv.flag?("delete")
19
- super
20
- end
21
-
22
- def validate!
23
- super
24
- help! "You must specify a dependency repository to remove" unless @path
25
- end
26
-
27
- def run
28
- super
29
- ensure_in_work_tree
30
- ensure_multirepo_enabled
31
-
32
- repo = Repo.new(@path)
33
- entry = ConfigEntry.new(repo)
34
-
35
- config_file = ConfigFile.new(".")
36
- if config_file.entry_exists?(entry)
37
- config_file.remove_entry(entry)
38
- Console.log_step("Removed '#{@path}' from the .multirepo file")
39
-
40
- if @delete
41
- FileUtils.rm_rf(@path)
42
- Console.log_step("Deleted '#{@path}' from disk")
43
- end
44
- else
45
- raise MultiRepoException, "'#{@path}' isn't tracked by multirepo"
46
- end
47
- rescue MultiRepoException => e
48
- Console.log_error(e.message)
49
- end
50
- end
1
+ require "multirepo/utility/console"
2
+ require "multirepo/files/config-file"
3
+
4
+ module MultiRepo
5
+ class RemoveCommand < Command
6
+ self.command = "remove"
7
+ self.summary = "Removes the specified dependency from multirepo."
8
+
9
+ def self.options
10
+ [
11
+ ['<path>', 'The relative path to the dependency to remove (e.g. ../MyOldDependency).'],
12
+ ['[--delete]', 'Delete the dependency on disk in addition to removing it from the multirepo config.']
13
+ ].concat(super)
14
+ end
15
+
16
+ def initialize(argv)
17
+ @path = argv.shift_argument
18
+ @delete = argv.flag?("delete")
19
+ super
20
+ end
21
+
22
+ def validate!
23
+ super
24
+ help! "You must specify a dependency repository to remove" unless @path
25
+ end
26
+
27
+ def run
28
+ super
29
+ ensure_in_work_tree
30
+ ensure_multirepo_enabled
31
+
32
+ repo = Repo.new(@path)
33
+ entry = ConfigEntry.new(repo)
34
+
35
+ config_file = ConfigFile.new(".")
36
+ if config_file.entry_exists?(entry)
37
+ config_file.remove_entry(entry)
38
+ Console.log_step("Removed '#{@path}' from the .multirepo file")
39
+
40
+ if @delete
41
+ FileUtils.rm_rf(@path)
42
+ Console.log_step("Deleted '#{@path}' from disk")
43
+ end
44
+ else
45
+ raise MultiRepoException, "'#{@path}' isn't tracked by multirepo"
46
+ end
47
+ rescue MultiRepoException => e
48
+ Console.log_error(e.message)
49
+ end
50
+ end
51
51
  end
@@ -1,21 +1,21 @@
1
- require "multirepo/utility/console"
2
-
3
- module MultiRepo
4
- class UninitCommand < Command
5
- self.command = "uninit"
6
- self.summary = "Removes all traces of multirepo in the current multirepo repository."
7
-
8
- def run
9
- super
10
- ensure_in_work_tree
11
-
12
- FileUtils.rm_f(".multirepo")
13
- TrackingFiles.new(".").delete
14
- uninstall_hooks
15
-
16
- Console.log_step("All traces of multirepo have been removed from this repository")
17
- rescue MultiRepoException => e
18
- Console.log_error(e.message)
19
- end
20
- end
1
+ require "multirepo/utility/console"
2
+
3
+ module MultiRepo
4
+ class UninitCommand < Command
5
+ self.command = "uninit"
6
+ self.summary = "Removes all traces of multirepo in the current multirepo repository."
7
+
8
+ def run
9
+ super
10
+ ensure_in_work_tree
11
+
12
+ FileUtils.rm_f(".multirepo")
13
+ TrackingFiles.new(".").delete
14
+ uninstall_hooks
15
+
16
+ Console.log_step("All traces of multirepo have been removed from this repository")
17
+ rescue MultiRepoException => e
18
+ Console.log_error(e.message)
19
+ end
20
+ end
21
21
  end
@@ -1,61 +1,61 @@
1
- require "multirepo/utility/console"
2
- require "multirepo/files/tracking-files"
3
-
4
- module MultiRepo
5
- class UpdateCommand < Command
6
- self.command = "update"
7
- self.summary = "Force-updates the multirepo tracking files."
8
-
9
- def self.options
10
- [
11
- ['[--force]', 'Update the tracking files even if dependencies contain uncommitted changes.'],
12
- ['[--commit]', 'Commit the tracking files after updating them.']
13
- ].concat(super)
14
- end
15
-
16
- def initialize(argv)
17
- @commit = argv.flag?("commit")
18
- @force = argv.flag?("force")
19
- super
20
- end
21
-
22
- def run
23
- super
24
- ensure_in_work_tree
25
- ensure_multirepo_enabled
26
-
27
- Console.log_step("Updating...")
28
-
29
- dependencies_clean = Utils.ensure_dependencies_clean(ConfigFile.new(".").load_entries)
30
- if dependencies_clean
31
- update_lock_file_step("Updated tracking files")
32
- elsif !dependencies_clean && @force
33
- update_lock_file_step("Force-updated tracking files (ignoring uncommitted changes)")
34
- else
35
- raise MultiRepoException, "Can't update because not all dependencies are clean"
36
- end
37
-
38
- Console.log_step("Done!")
39
- rescue MultiRepoException => e
40
- Console.log_error(e.message)
41
- end
42
-
43
- def update_lock_file_step(log_message)
44
- tracking_files = TrackingFiles.new(".")
45
- changed = tracking_files.update
46
-
47
- if changed
48
- Console.log_substep("Updated tracking files")
49
- else
50
- Console.log_substep("Tracking files are already up-to-date")
51
- end
52
-
53
- if @commit
54
- committed = tracking_files.commit("[multirepo] Updated tracking files manually")
55
- Console.log_substep("Committed tracking files") if committed
56
- elsif changed
57
- Console.log_substep(log_message)
58
- end
59
- end
60
- end
1
+ require "multirepo/utility/console"
2
+ require "multirepo/files/tracking-files"
3
+
4
+ module MultiRepo
5
+ class UpdateCommand < Command
6
+ self.command = "update"
7
+ self.summary = "Force-updates the multirepo tracking files."
8
+
9
+ def self.options
10
+ [
11
+ ['[--force]', 'Update the tracking files even if dependencies contain uncommitted changes.'],
12
+ ['[--commit]', 'Commit the tracking files after updating them.']
13
+ ].concat(super)
14
+ end
15
+
16
+ def initialize(argv)
17
+ @commit = argv.flag?("commit")
18
+ @force = argv.flag?("force")
19
+ super
20
+ end
21
+
22
+ def run
23
+ super
24
+ ensure_in_work_tree
25
+ ensure_multirepo_enabled
26
+
27
+ Console.log_step("Updating...")
28
+
29
+ dependencies_clean = Utils.ensure_dependencies_clean(ConfigFile.new(".").load_entries)
30
+ if dependencies_clean
31
+ update_lock_file_step("Updated tracking files")
32
+ elsif !dependencies_clean && @force
33
+ update_lock_file_step("Force-updated tracking files (ignoring uncommitted changes)")
34
+ else
35
+ raise MultiRepoException, "Can't update because not all dependencies are clean"
36
+ end
37
+
38
+ Console.log_step("Done!")
39
+ rescue MultiRepoException => e
40
+ Console.log_error(e.message)
41
+ end
42
+
43
+ def update_lock_file_step(log_message)
44
+ tracking_files = TrackingFiles.new(".")
45
+ changed = tracking_files.update
46
+
47
+ if changed
48
+ Console.log_substep("Updated tracking files")
49
+ else
50
+ Console.log_substep("Tracking files are already up-to-date")
51
+ end
52
+
53
+ if @commit
54
+ committed = tracking_files.commit("[multirepo] Updated tracking files manually")
55
+ Console.log_substep("Committed tracking files") if committed
56
+ elsif changed
57
+ Console.log_substep(log_message)
58
+ end
59
+ end
60
+ end
61
61
  end
@@ -1,16 +1,16 @@
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
- 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
+ end
16
16
  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 ==(entry)
26
- entry_path = Pathname.new(entry.path)
27
- self_path = Pathname.new(self.path)
28
- entry_path.exist? && self_path.exist? && entry_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
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 ==(entry)
26
+ entry_path = Pathname.new(entry.path)
27
+ self_path = Pathname.new(self.path)
28
+ entry_path.exist? && self_path.exist? && entry_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
39
  end