git-multirepo 1.0.0.beta39 → 1.0.0.beta40

Sign up to get free protection for your applications and to get access to all the features.
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