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,82 +1,82 @@
1
- require "fileutils"
2
-
3
- module MultiRepo
4
- class Utils
5
- def self.path_for_resource(resource_name)
6
- gem_path = Gem::Specification.find_by_name("git-multirepo").gem_dir
7
- File.join(gem_path, "resources/#{resource_name}")
8
- end
9
-
10
- def self.is_multirepo_enabled(path)
11
- File.exists?(File.join(path, ".multirepo"))
12
- end
13
-
14
- def self.is_multirepo_tracked(path)
15
- is_multirepo_enabled(path) && File.exists?(File.join(path, ".multirepo.lock"))
16
- end
17
-
18
- def self.install_hook(name, path)
19
- destination_path = File.join(path, ".git/hooks")
20
- destination_file = File.join(destination_path, name)
21
- FileUtils.cp(path_for_resource(name), destination_file)
22
- FileUtils.chmod(0755, destination_file) # -rwxr-xr-x
23
- end
24
-
25
- def self.sibling_repos
26
- sibling_directories = Dir['../*/']
27
- sibling_repos = sibling_directories.map{ |d| Repo.new(d) }.select{ |r| r.exists? }
28
- sibling_repos.delete_if{ |r| Pathname.new(r.path).realpath == Pathname.new(".").realpath }
29
- end
30
-
31
- def self.ensure_dependencies_clean(config_entries)
32
- clean = true
33
- config_entries.each do |e|
34
- next unless e.repo.exists?
35
- dependency_clean = e.repo.clean?
36
- clean &= dependency_clean
37
- Console.log_warning("Dependency '#{e.repo.path}' contains uncommitted changes") unless dependency_clean
38
- end
39
- return clean
40
- end
41
-
42
- def self.ensure_working_copies_clean(repos)
43
- clean = true
44
- repos.each do |repo|
45
- dependency_clean = repo.clean?
46
- clean &= dependency_clean
47
- Console.log_warning("Repo '#{repo.path}' contains uncommitted changes") unless dependency_clean
48
- end
49
- return clean
50
- end
51
-
52
- def self.convert_to_windows_path(unix_path)
53
- components = Pathname.new(unix_path).each_filename.to_a
54
- components.join(File::ALT_SEPARATOR)
55
- end
56
-
57
- def self.reveal_in_default_file_browser(unix_path)
58
- if OS.osx?
59
- system %{open "#{unix_path}"}
60
- elsif OS.windows?
61
- system %{explorer "#{Utils.convert_to_windows_path(unix_path)}"}
62
- end
63
- end
64
-
65
- def self.open_in_default_app(unix_path)
66
- if OS.osx?
67
- system %{open "#{unix_path}"}
68
- elsif OS.windows?
69
- system %{cmd /c "start C:\\#{Utils.convert_to_windows_path(unix_path)}"}
70
- end
71
- end
72
-
73
- def self.append_if_missing(path, pattern, string_to_append)
74
- unless File.exists?(path)
75
- File.open(path, 'w') { |f| f.puts(string_to_append) }
76
- else
77
- string_located = File.readlines(path).grep(pattern).any?
78
- File.open(path, 'a') { |f| f.puts(string_to_append) } unless string_located
79
- end
80
- end
81
- end
1
+ require "fileutils"
2
+
3
+ module MultiRepo
4
+ class Utils
5
+ def self.path_for_resource(resource_name)
6
+ gem_path = Gem::Specification.find_by_name("git-multirepo").gem_dir
7
+ File.join(gem_path, "resources/#{resource_name}")
8
+ end
9
+
10
+ def self.is_multirepo_enabled(path)
11
+ File.exists?(File.join(path, ".multirepo"))
12
+ end
13
+
14
+ def self.is_multirepo_tracked(path)
15
+ is_multirepo_enabled(path) && File.exists?(File.join(path, ".multirepo.lock"))
16
+ end
17
+
18
+ def self.install_hook(name, path)
19
+ destination_path = File.join(path, ".git/hooks")
20
+ destination_file = File.join(destination_path, name)
21
+ FileUtils.cp(path_for_resource(name), destination_file)
22
+ FileUtils.chmod(0755, destination_file) # -rwxr-xr-x
23
+ end
24
+
25
+ def self.sibling_repos
26
+ sibling_directories = Dir['../*/']
27
+ sibling_repos = sibling_directories.map{ |d| Repo.new(d) }.select{ |r| r.exists? }
28
+ sibling_repos.delete_if{ |r| Pathname.new(r.path).realpath == Pathname.new(".").realpath }
29
+ end
30
+
31
+ def self.ensure_dependencies_clean(config_entries)
32
+ clean = true
33
+ config_entries.each do |e|
34
+ next unless e.repo.exists?
35
+ dependency_clean = e.repo.clean?
36
+ clean &= dependency_clean
37
+ Console.log_warning("Dependency '#{e.repo.path}' contains uncommitted changes") unless dependency_clean
38
+ end
39
+ return clean
40
+ end
41
+
42
+ def self.ensure_working_copies_clean(repos)
43
+ clean = true
44
+ repos.each do |repo|
45
+ dependency_clean = repo.clean?
46
+ clean &= dependency_clean
47
+ Console.log_warning("Repo '#{repo.path}' contains uncommitted changes") unless dependency_clean
48
+ end
49
+ return clean
50
+ end
51
+
52
+ def self.convert_to_windows_path(unix_path)
53
+ components = Pathname.new(unix_path).each_filename.to_a
54
+ components.join(File::ALT_SEPARATOR)
55
+ end
56
+
57
+ def self.reveal_in_default_file_browser(unix_path)
58
+ if OS.osx?
59
+ system %{open "#{unix_path}"}
60
+ elsif OS.windows?
61
+ system %{explorer "#{Utils.convert_to_windows_path(unix_path)}"}
62
+ end
63
+ end
64
+
65
+ def self.open_in_default_app(unix_path)
66
+ if OS.osx?
67
+ system %{open "#{unix_path}"}
68
+ elsif OS.windows?
69
+ system %{cmd /c "start C:\\#{Utils.convert_to_windows_path(unix_path)}"}
70
+ end
71
+ end
72
+
73
+ def self.append_if_missing(path, pattern, string_to_append)
74
+ unless File.exists?(path)
75
+ File.open(path, 'w') { |f| f.puts(string_to_append) }
76
+ else
77
+ string_located = File.readlines(path).grep(pattern).any?
78
+ File.open(path, 'a') { |f| f.puts(string_to_append) } unless string_located
79
+ end
80
+ end
81
+ end
82
82
  end
data/resources/.gitconfig CHANGED
@@ -1,3 +1,3 @@
1
- [merge "ours"]
2
- name = "Always keep ours"
1
+ [merge "ours"]
2
+ name = "Always keep ours"
3
3
  driver = true
@@ -1,6 +1,6 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "rubygems"
4
- require "git-multirepo"
5
-
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rubygems"
4
+ require "git-multirepo"
5
+
6
6
  MultiRepo::PostCommitHook.run
data/resources/pre-commit CHANGED
@@ -1,6 +1,6 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "rubygems"
4
- require "git-multirepo"
5
-
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rubygems"
4
+ require "git-multirepo"
5
+
6
6
  MultiRepo::PreCommitHook.run
@@ -1,19 +1,19 @@
1
- require "multirepo/commands/init"
2
-
3
- RSpec.describe("Init") do
4
- it "creates the config file" do
5
- pending
6
- end
7
-
8
- it "adds only specified repos to the config file" do
9
- pending
10
- end
11
-
12
- it "installs the hooks" do
13
- pending
14
- end
15
-
16
- it "fails when there are uncommitted changes in dependencies" do
17
- pending
18
- end
1
+ require "multirepo/commands/init"
2
+
3
+ RSpec.describe("Init") do
4
+ it "creates the config file" do
5
+ pending
6
+ end
7
+
8
+ it "adds only specified repos to the config file" do
9
+ pending
10
+ end
11
+
12
+ it "installs the hooks" do
13
+ pending
14
+ end
15
+
16
+ it "fails when there are uncommitted changes in dependencies" do
17
+ pending
18
+ end
19
19
  end
data/spec/spec_helper.rb CHANGED
@@ -1,89 +1,89 @@
1
- # This file was generated by the `rspec --init` command. Conventionally, all
2
- # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
- # The generated `.rspec` file contains `--require spec_helper` which will cause this
4
- # file to always be loaded, without a need to explicitly require it in any files.
5
- #
6
- # Given that it is always loaded, you are encouraged to keep this file as
7
- # light-weight as possible. Requiring heavyweight dependencies from this file
8
- # will add to the boot time of your test suite on EVERY test run, even for an
9
- # individual file that may not need all of that loaded. Instead, consider making
10
- # a separate helper file that requires the additional dependencies and performs
11
- # the additional setup, and require it from the spec files that actually need it.
12
- #
13
- # The `.rspec` file also contains a few flags that are not defaults but that
14
- # users commonly want.
15
- #
16
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
17
- RSpec.configure do |config|
18
- # rspec-expectations config goes here. You can use an alternate
19
- # assertion/expectation library such as wrong or the stdlib/minitest
20
- # assertions if you prefer.
21
- config.expect_with :rspec do |expectations|
22
- # This option will default to `true` in RSpec 4. It makes the `description`
23
- # and `failure_message` of custom matchers include text for helper methods
24
- # defined using `chain`, e.g.:
25
- # be_bigger_than(2).and_smaller_than(4).description
26
- # # => "be bigger than 2 and smaller than 4"
27
- # ...rather than:
28
- # # => "be bigger than 2"
29
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
30
- end
31
-
32
- # rspec-mocks config goes here. You can use an alternate test double
33
- # library (such as bogus or mocha) by changing the `mock_with` option here.
34
- config.mock_with :rspec do |mocks|
35
- # Prevents you from mocking or stubbing a method that does not exist on
36
- # a real object. This is generally recommended, and will default to
37
- # `true` in RSpec 4.
38
- mocks.verify_partial_doubles = true
39
- end
40
-
41
- # The settings below are suggested to provide a good initial experience
42
- # with RSpec, but feel free to customize to your heart's content.
43
- =begin
44
- # These two settings work together to allow you to limit a spec run
45
- # to individual examples or groups you care about by tagging them with
46
- # `:focus` metadata. When nothing is tagged with `:focus`, all examples
47
- # get run.
48
- config.filter_run :focus
49
- config.run_all_when_everything_filtered = true
50
-
51
- # Limits the available syntax to the non-monkey patched syntax that is recommended.
52
- # For more details, see:
53
- # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
54
- # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
55
- # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
56
- config.disable_monkey_patching!
57
-
58
- # This setting enables warnings. It's recommended, but in some cases may
59
- # be too noisy due to issues in dependencies.
60
- config.warnings = true
61
-
62
- # Many RSpec users commonly either run the entire suite or an individual
63
- # file, and it's useful to allow more verbose output when running an
64
- # individual spec file.
65
- if config.files_to_run.one?
66
- # Use the documentation formatter for detailed output,
67
- # unless a formatter has already been configured
68
- # (e.g. via a command-line flag).
69
- config.default_formatter = 'doc'
70
- end
71
-
72
- # Print the 10 slowest examples and example groups at the
73
- # end of the spec run, to help surface which specs are running
74
- # particularly slow.
75
- config.profile_examples = 10
76
-
77
- # Run specs in random order to surface order dependencies. If you find an
78
- # order dependency and want to debug it, you can fix the order by providing
79
- # the seed, which is printed after each run.
80
- # --seed 1234
81
- config.order = :random
82
-
83
- # Seed global randomization in this process using the `--seed` CLI option.
84
- # Setting this allows you to use `--seed` to deterministically reproduce
85
- # test failures related to randomization by passing the same `--seed` value
86
- # as the one that triggered the failure.
87
- Kernel.srand config.seed
88
- =end
89
- end
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # The generated `.rspec` file contains `--require spec_helper` which will cause this
4
+ # file to always be loaded, without a need to explicitly require it in any files.
5
+ #
6
+ # Given that it is always loaded, you are encouraged to keep this file as
7
+ # light-weight as possible. Requiring heavyweight dependencies from this file
8
+ # will add to the boot time of your test suite on EVERY test run, even for an
9
+ # individual file that may not need all of that loaded. Instead, consider making
10
+ # a separate helper file that requires the additional dependencies and performs
11
+ # the additional setup, and require it from the spec files that actually need it.
12
+ #
13
+ # The `.rspec` file also contains a few flags that are not defaults but that
14
+ # users commonly want.
15
+ #
16
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
17
+ RSpec.configure do |config|
18
+ # rspec-expectations config goes here. You can use an alternate
19
+ # assertion/expectation library such as wrong or the stdlib/minitest
20
+ # assertions if you prefer.
21
+ config.expect_with :rspec do |expectations|
22
+ # This option will default to `true` in RSpec 4. It makes the `description`
23
+ # and `failure_message` of custom matchers include text for helper methods
24
+ # defined using `chain`, e.g.:
25
+ # be_bigger_than(2).and_smaller_than(4).description
26
+ # # => "be bigger than 2 and smaller than 4"
27
+ # ...rather than:
28
+ # # => "be bigger than 2"
29
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
30
+ end
31
+
32
+ # rspec-mocks config goes here. You can use an alternate test double
33
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
34
+ config.mock_with :rspec do |mocks|
35
+ # Prevents you from mocking or stubbing a method that does not exist on
36
+ # a real object. This is generally recommended, and will default to
37
+ # `true` in RSpec 4.
38
+ mocks.verify_partial_doubles = true
39
+ end
40
+
41
+ # The settings below are suggested to provide a good initial experience
42
+ # with RSpec, but feel free to customize to your heart's content.
43
+ =begin
44
+ # These two settings work together to allow you to limit a spec run
45
+ # to individual examples or groups you care about by tagging them with
46
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
47
+ # get run.
48
+ config.filter_run :focus
49
+ config.run_all_when_everything_filtered = true
50
+
51
+ # Limits the available syntax to the non-monkey patched syntax that is recommended.
52
+ # For more details, see:
53
+ # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
54
+ # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
55
+ # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
56
+ config.disable_monkey_patching!
57
+
58
+ # This setting enables warnings. It's recommended, but in some cases may
59
+ # be too noisy due to issues in dependencies.
60
+ config.warnings = true
61
+
62
+ # Many RSpec users commonly either run the entire suite or an individual
63
+ # file, and it's useful to allow more verbose output when running an
64
+ # individual spec file.
65
+ if config.files_to_run.one?
66
+ # Use the documentation formatter for detailed output,
67
+ # unless a formatter has already been configured
68
+ # (e.g. via a command-line flag).
69
+ config.default_formatter = 'doc'
70
+ end
71
+
72
+ # Print the 10 slowest examples and example groups at the
73
+ # end of the spec run, to help surface which specs are running
74
+ # particularly slow.
75
+ config.profile_examples = 10
76
+
77
+ # Run specs in random order to surface order dependencies. If you find an
78
+ # order dependency and want to debug it, you can fix the order by providing
79
+ # the seed, which is printed after each run.
80
+ # --seed 1234
81
+ config.order = :random
82
+
83
+ # Seed global randomization in this process using the `--seed` CLI option.
84
+ # Setting this allows you to use `--seed` to deterministically reproduce
85
+ # test failures related to randomization by passing the same `--seed` value
86
+ # as the one that triggered the failure.
87
+ Kernel.srand config.seed
88
+ =end
89
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-multirepo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta39
4
+ version: 1.0.0.beta40
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michaël Fortin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-15 00:00:00.000000000 Z
11
+ date: 2015-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -164,6 +164,7 @@ files:
164
164
  - lib/multirepo/commands/clean-command.rb
165
165
  - lib/multirepo/commands/clone-command.rb
166
166
  - lib/multirepo/commands/command.rb
167
+ - lib/multirepo/commands/do-command.rb
167
168
  - lib/multirepo/commands/fetch-command.rb
168
169
  - lib/multirepo/commands/graph-command.rb
169
170
  - lib/multirepo/commands/init-command.rb
@@ -222,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
223
  version: 1.3.1
223
224
  requirements: []
224
225
  rubyforge_project:
225
- rubygems_version: 2.0.14
226
+ rubygems_version: 2.4.5
226
227
  signing_key:
227
228
  specification_version: 4
228
229
  summary: Track multiple Git repositories side-by-side