git-multirepo 1.0.0.beta50 → 1.0.0.beta51
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/lib/multirepo/commands/checkout-command.rb +5 -4
- data/lib/multirepo/commands/command.rb +0 -4
- data/lib/multirepo/commands/do-command.rb +8 -10
- data/lib/multirepo/commands/inspect-command.rb +1 -1
- data/lib/multirepo/commands/install-command.rb +2 -2
- data/lib/multirepo/commands/merge-command.rb +13 -13
- data/lib/multirepo/commands/open-command.rb +7 -9
- data/lib/multirepo/commands/update-command.rb +30 -24
- data/lib/multirepo/info.rb +1 -1
- data/lib/multirepo/logic/repo-selection.rb +25 -0
- data/lib/multirepo/logic/revision-selection.rb +15 -0
- data/lib/multirepo/logic/revision-selector.rb +8 -20
- data/lib/multirepo/utility/utils.rb +4 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f69d3b2b70a1a87eaf12962cb4d324f62368e5e5
|
4
|
+
data.tar.gz: 8ff1400b4b192b6ebd80077005f01983baf2691c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8003b60e23ec40811e2946958285c637aef6ccd537f884912f165a4c142fb49ab147916d653f27138aa18e714bfb9bb63c6a50a674c5cb404af5ae9db35498c5
|
7
|
+
data.tar.gz: 493424da5709a8404eb17541accbb49c1d5ed1bce257407e0a1d2ee3c93c551353c9af2b150c502ee47e63ad89f680b1d40ddd2f7c5bf228344bd2dba9b1bb6b
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,20 @@
|
|
2
2
|
|
3
3
|
To install betas run `[sudo] gem install git-multirepo --pre`
|
4
4
|
|
5
|
+
## 1.0.0.beta51
|
6
|
+
|
7
|
+
- **Enhancement:** `multi merge` now shows a lock file diff if the user chooses to perform an update after the merge operation
|
8
|
+
- **Enhancement:** `multi merge` now uses the same update logic as `multi update` for more robustness and uniformity
|
9
|
+
- **Enhancement:** `multi update` has a new `--no-diff` option to skip lock file diffing and shows diff by default
|
10
|
+
- **Bug Fix:** `multi update` did not show the lock file diff when the `--commit` flag was specified
|
11
|
+
- **Internals:** `multi update`, `multi do` and `multi open` now use common repo-selection logic (--deps, --main, etc.)
|
12
|
+
|
13
|
+
## 1.0.0.beta50
|
14
|
+
|
15
|
+
- **Enhancement:** `multi merge` now asks to update the main repo lock file after a merge (useful for CI scenarios)
|
16
|
+
- **Enhancement:** `multi update` now asks to show a lock file diff if the main repo's lock file was modified
|
17
|
+
- **Enhancement:** Checking out the main repo in floating HEAD to prevent unnecessary local branch creation in `multi merge`
|
18
|
+
|
5
19
|
## 1.0.0.beta49
|
6
20
|
|
7
21
|
- **Enhancement:** Added --deps, --main and --all flags to `multi update` and update all by default
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "multirepo/utility/console"
|
2
|
+
require "multirepo/utility/utils"
|
2
3
|
require "multirepo/logic/revision-selector"
|
3
4
|
require "multirepo/logic/performer"
|
4
5
|
|
@@ -25,7 +26,7 @@ module MultiRepo
|
|
25
26
|
def validate!
|
26
27
|
super
|
27
28
|
help! "You must specify a branch or commit id to checkout" unless @ref_name
|
28
|
-
unless
|
29
|
+
unless Utils.only_one_true?(@checkout_latest, @checkout_exact)
|
29
30
|
help! "You can't provide more than one operation modifier (--latest, --exact, etc.)"
|
30
31
|
end
|
31
32
|
end
|
@@ -36,7 +37,7 @@ module MultiRepo
|
|
36
37
|
# Find out the checkout mode based on command-line options
|
37
38
|
mode = RevisionSelector.mode_for_args(@checkout_latest, @checkout_exact)
|
38
39
|
|
39
|
-
strategy_name =
|
40
|
+
strategy_name = RevisionSelection.name_for_mode(mode)
|
40
41
|
Console.log_step("Checking out #{@ref_name} and its dependencies using the '#{strategy_name}' strategy...")
|
41
42
|
|
42
43
|
main_repo = Repo.new(".")
|
@@ -87,11 +88,11 @@ module MultiRepo
|
|
87
88
|
return true unless main_repo.ref(ref_name).merge_commit?
|
88
89
|
|
89
90
|
case mode
|
90
|
-
when
|
91
|
+
when RevisionSelection::AS_LOCK
|
91
92
|
Console.log_error("The specified ref is a merge commit and an \"as-lock\" checkout was requested.")
|
92
93
|
Console.log_error("The resulting checkout would most probably not result in a valid project state.")
|
93
94
|
return false
|
94
|
-
when
|
95
|
+
when RevisionSelection::LATEST
|
95
96
|
Console.log_warning("The specified ref is a merge commit and a \"latest\" checkout was requested.")
|
96
97
|
Console.log_warning("The work branches recorded in the branch from which the merge was performed will be checked out.")
|
97
98
|
end
|
@@ -65,10 +65,6 @@ module MultiRepo
|
|
65
65
|
def multirepo_enabled_dependencies
|
66
66
|
ConfigFile.new(".").load_entries.select { |e| Utils.multirepo_enabled?(e.repo.path) }
|
67
67
|
end
|
68
|
-
|
69
|
-
def validate_only_one_flag(*flags)
|
70
|
-
flags.reduce(0) { |count, flag| count += 1 if flag; count } <= 1
|
71
|
-
end
|
72
68
|
|
73
69
|
def ensure_in_work_tree
|
74
70
|
repo = Repo.new(".")
|
@@ -1,10 +1,11 @@
|
|
1
1
|
require_relative "command"
|
2
|
-
require "multirepo/utility/utils"
|
3
2
|
require "multirepo/utility/console"
|
3
|
+
require "multirepo/utility/utils"
|
4
4
|
require "multirepo/files/config-file"
|
5
5
|
require "multirepo/git/repo"
|
6
6
|
require "multirepo/git/git-runner"
|
7
7
|
require "multirepo/logic/performer"
|
8
|
+
require "multirepo/logic/repo-selection"
|
8
9
|
|
9
10
|
module MultiRepo
|
10
11
|
class DoCommand < Command
|
@@ -22,18 +23,14 @@ module MultiRepo
|
|
22
23
|
|
23
24
|
def initialize(argv)
|
24
25
|
@operation = argv.shift_argument
|
25
|
-
@
|
26
|
-
@main_only = argv.flag?("main")
|
27
|
-
@deps_only = argv.flag?("deps")
|
26
|
+
@repo_selection = RepoSelection.new(argv)
|
28
27
|
super
|
29
28
|
end
|
30
29
|
|
31
30
|
def validate!
|
32
31
|
super
|
33
32
|
help! "You must provide a git operation to perform" unless @operation
|
34
|
-
|
35
|
-
help! "You can't provide more than one operation modifier (--deps, --main, etc.)"
|
36
|
-
end
|
33
|
+
help! "You can't provide more than one operation modifier (--deps, --main, etc.)" unless @repo_selection.valid?
|
37
34
|
end
|
38
35
|
|
39
36
|
def run
|
@@ -43,13 +40,14 @@ module MultiRepo
|
|
43
40
|
@operation = @operation.sub(/^git /, "")
|
44
41
|
|
45
42
|
success = true
|
46
|
-
|
43
|
+
case @repo_selection.value
|
44
|
+
when RepoSelection::MAIN
|
47
45
|
confirm_main_repo_operation
|
48
46
|
success &= perform_operation_on_main(@operation)
|
49
|
-
|
47
|
+
when RepoSelection::DEPS
|
50
48
|
confirm_dependencies_operation
|
51
49
|
success &= perform_operation_on_dependencies(@operation)
|
52
|
-
|
50
|
+
when RepoSelection::ALL
|
53
51
|
confirm_main_repo_operation
|
54
52
|
confirm_dependencies_operation
|
55
53
|
success &= perform_operation_on_dependencies(@operation) # Ordered dependencies first
|
@@ -26,7 +26,7 @@ module MultiRepo
|
|
26
26
|
|
27
27
|
def validate!
|
28
28
|
super
|
29
|
-
unless
|
29
|
+
unless Utils.only_one_true?(@hooks, @ci)
|
30
30
|
help! "You can't provide more than one operation modifier (--hooks, --ci, etc.)"
|
31
31
|
end
|
32
32
|
end
|
@@ -94,7 +94,7 @@ module MultiRepo
|
|
94
94
|
|
95
95
|
# Checkout the appropriate branches as specified in the lock file
|
96
96
|
checkout_command = CheckoutCommand.new(CLAide::ARGV.new([]))
|
97
|
-
mode = @ci ?
|
97
|
+
mode = @ci ? RevisionSelection::AS_LOCK : RevisionSelection::LATEST
|
98
98
|
checkout_command.dependencies_checkout_step(mode)
|
99
99
|
end
|
100
100
|
|
@@ -1,11 +1,14 @@
|
|
1
1
|
require "terminal-table"
|
2
2
|
|
3
|
-
require "multirepo/utility/console"
|
3
|
+
require "multirepo/utility/console"
|
4
|
+
require "multirepo/utility/utils"
|
4
5
|
require "multirepo/logic/node"
|
5
6
|
require "multirepo/logic/revision-selector"
|
7
|
+
require "multirepo/logic/repo-selection"
|
6
8
|
require "multirepo/logic/performer"
|
7
9
|
require "multirepo/logic/merge-descriptor"
|
8
10
|
require "multirepo/files/tracking-files"
|
11
|
+
require "multirepo/commands/update-command"
|
9
12
|
|
10
13
|
module MultiRepo
|
11
14
|
class MergeValidationResult
|
@@ -39,7 +42,7 @@ module MultiRepo
|
|
39
42
|
def validate!
|
40
43
|
super
|
41
44
|
help! "You must specify a ref to merge" unless @ref_name
|
42
|
-
unless
|
45
|
+
unless Utils.only_one_true?(@checkout_latest, @checkout_exact)
|
43
46
|
help! "You can't provide more than one operation modifier (--latest, --exact, etc.)"
|
44
47
|
end
|
45
48
|
end
|
@@ -51,7 +54,7 @@ module MultiRepo
|
|
51
54
|
# Find out the checkout mode based on command-line options
|
52
55
|
mode = RevisionSelector.mode_for_args(@checkout_latest, @checkout_exact)
|
53
56
|
|
54
|
-
strategy_name =
|
57
|
+
strategy_name = RevisionSelection.name_for_mode(mode)
|
55
58
|
Console.log_step("Merging #{@ref_name} with '#{strategy_name}' strategy...")
|
56
59
|
|
57
60
|
main_repo = Repo.new(".")
|
@@ -222,26 +225,23 @@ module MultiRepo
|
|
222
225
|
|
223
226
|
def ask_tracking_files_update(all_merges_succeeded)
|
224
227
|
unless all_merges_succeeded
|
225
|
-
Console.log_warning("Perform a
|
228
|
+
Console.log_warning("Perform a 'multi update' after resolving merge conflicts to ensure lock file contents are valid")
|
226
229
|
return
|
227
230
|
end
|
228
231
|
|
229
|
-
return unless Console.ask("Update main repo tracking files (important for continuous integration)
|
232
|
+
return unless Console.ask("Update main repo tracking files? (important for continuous integration)")
|
230
233
|
|
231
|
-
|
232
|
-
|
233
|
-
tracking_files.commit("[multirepo] Post-merge tracking files update")
|
234
|
-
|
235
|
-
Console.log_info("Updated and committed tracking files in the main repo")
|
234
|
+
update_command = UpdateCommand.new(CLAide::ARGV.new(["--commit", "--diff"]))
|
235
|
+
update_command.update_tracking_files_step(RepoSelection::MAIN)
|
236
236
|
end
|
237
237
|
|
238
238
|
def message_for_mode(mode, ref_name)
|
239
239
|
case mode
|
240
|
-
when
|
240
|
+
when RevisionSelection::AS_LOCK
|
241
241
|
"merge specific commits as stored in the lock file for main repo revision #{ref_name}"
|
242
|
-
when
|
242
|
+
when RevisionSelection::LATEST
|
243
243
|
"merge each branch as stored in the lock file of main repo revision #{ref_name}"
|
244
|
-
when
|
244
|
+
when RevisionSelection::EXACT
|
245
245
|
"merge #{ref_name} for each repository, ignoring the contents of the lock file"
|
246
246
|
end
|
247
247
|
end
|
@@ -2,6 +2,7 @@ require "os"
|
|
2
2
|
|
3
3
|
require "multirepo/utility/console"
|
4
4
|
require "multirepo/utility/utils"
|
5
|
+
require "multirepo/logic/repo-selection"
|
5
6
|
|
6
7
|
module MultiRepo
|
7
8
|
class OpenCommand < Command
|
@@ -17,28 +18,25 @@ module MultiRepo
|
|
17
18
|
end
|
18
19
|
|
19
20
|
def initialize(argv)
|
20
|
-
@
|
21
|
-
@main_only = argv.flag?("main")
|
22
|
-
@deps_only = argv.flag?("deps")
|
21
|
+
@repo_selection = RepoSelection.new(argv)
|
23
22
|
super
|
24
23
|
end
|
25
24
|
|
26
25
|
def validate!
|
27
26
|
super
|
28
|
-
|
29
|
-
help! "You can't provide more than one operation modifier (--deps, --main, etc.)"
|
30
|
-
end
|
27
|
+
help! "You can't provide more than one operation modifier (--deps, --main, etc.)" unless @repo_selection.valid?
|
31
28
|
end
|
32
29
|
|
33
30
|
def run
|
34
31
|
ensure_in_work_tree
|
35
32
|
ensure_multirepo_enabled
|
36
33
|
|
37
|
-
|
34
|
+
case @repo_selection.value
|
35
|
+
when RepoSelection::MAIN
|
38
36
|
open_main
|
39
|
-
|
37
|
+
when RepoSelection::DEPS
|
40
38
|
open_dependencies
|
41
|
-
|
39
|
+
when RepoSelection::ALL
|
42
40
|
open_dependencies
|
43
41
|
open_main
|
44
42
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require "multirepo/utility/console"
|
2
|
+
require "multirepo/utility/utils"
|
2
3
|
require "multirepo/logic/performer"
|
4
|
+
require "multirepo/logic/repo-selection"
|
3
5
|
require "multirepo/files/tracking-files"
|
4
6
|
require "multirepo/git/git-runner"
|
5
7
|
|
@@ -14,24 +16,22 @@ module MultiRepo
|
|
14
16
|
['[--main]', 'Update the main repository.'],
|
15
17
|
['[--deps]', 'Update dependencies.'],
|
16
18
|
['[--force]', 'Update the tracking files even if dependencies contain uncommitted changes.'],
|
17
|
-
['[--commit]', 'Commit the tracking files after updating them.']
|
19
|
+
['[--commit]', 'Commit the tracking files after updating them.'],
|
20
|
+
['[--no-diff]', 'Don\'t show lock file diff(s) after updating.']
|
18
21
|
].concat(super)
|
19
22
|
end
|
20
23
|
|
21
24
|
def initialize(argv)
|
22
|
-
@
|
23
|
-
@main_only = argv.flag?("main")
|
24
|
-
@deps_only = argv.flag?("deps")
|
25
|
+
@repo_selection = RepoSelection.new(argv)
|
25
26
|
@commit = argv.flag?("commit")
|
26
27
|
@force = argv.flag?("force")
|
28
|
+
@diff = argv.flag?("diff", true)
|
27
29
|
super
|
28
30
|
end
|
29
31
|
|
30
32
|
def validate!
|
31
33
|
super
|
32
|
-
|
33
|
-
help! "You can't provide more than one operation modifier (--deps, --main, etc.)"
|
34
|
-
end
|
34
|
+
help! "You can't provide more than one operation modifier (--deps, --main, etc.)" unless @repo_selection.valid?
|
35
35
|
end
|
36
36
|
|
37
37
|
def run
|
@@ -40,7 +40,7 @@ module MultiRepo
|
|
40
40
|
|
41
41
|
dependencies_clean = Utils.dependencies_clean?(ConfigFile.new(".").load_entries)
|
42
42
|
if dependencies_clean || @force
|
43
|
-
update_tracking_files_step
|
43
|
+
update_tracking_files_step(@repo_selection.value)
|
44
44
|
else
|
45
45
|
fail MultiRepoException, "Can't update because not all dependencies are clean"
|
46
46
|
end
|
@@ -48,21 +48,19 @@ module MultiRepo
|
|
48
48
|
Console.log_step("Done!")
|
49
49
|
end
|
50
50
|
|
51
|
-
def update_tracking_files_step
|
52
|
-
|
53
|
-
|
51
|
+
def update_tracking_files_step(repo_selection_value)
|
52
|
+
case repo_selection_value
|
53
|
+
when RepoSelection::MAIN
|
54
54
|
Console.log_step("Updating main repo...")
|
55
|
-
|
56
|
-
|
55
|
+
update_main
|
56
|
+
when RepoSelection::DEPS
|
57
57
|
Console.log_step("Updating dependencies...")
|
58
58
|
update_dependencies
|
59
|
-
|
59
|
+
when RepoSelection::ALL
|
60
60
|
Console.log_step("Updating main repo and dependencies...")
|
61
61
|
update_dependencies
|
62
|
-
|
62
|
+
update_main
|
63
63
|
end
|
64
|
-
|
65
|
-
show_diff(".") if main_changed && Console.ask("Show diff?")
|
66
64
|
end
|
67
65
|
|
68
66
|
def update_dependencies
|
@@ -70,13 +68,20 @@ module MultiRepo
|
|
70
68
|
Performer.dependencies.each do |dependency|
|
71
69
|
path = dependency.config_entry.path
|
72
70
|
name = dependency.config_entry.name
|
73
|
-
any_changed |=
|
71
|
+
any_changed |= update_one(path, name) if Utils.multirepo_enabled?(path)
|
74
72
|
end
|
75
73
|
return any_changed
|
76
74
|
end
|
77
75
|
|
78
76
|
def update_main
|
79
|
-
|
77
|
+
update_one(".", "main repo")
|
78
|
+
end
|
79
|
+
|
80
|
+
def update_one(path, name)
|
81
|
+
updated = update_tracking_files(path, name)
|
82
|
+
show_diff(path) if updated && @diff
|
83
|
+
commit_tracking_files(path) if @commit
|
84
|
+
return updated
|
80
85
|
end
|
81
86
|
|
82
87
|
def update_tracking_files(path, name)
|
@@ -91,14 +96,15 @@ module MultiRepo
|
|
91
96
|
Console.log_info("Tracking files are already up-to-date")
|
92
97
|
end
|
93
98
|
|
94
|
-
if @commit
|
95
|
-
committed = tracking_files.commit("[multirepo] Updated tracking files manually")
|
96
|
-
Console.log_info("Committed tracking files") if committed
|
97
|
-
end
|
98
|
-
|
99
99
|
return changed
|
100
100
|
end
|
101
101
|
|
102
|
+
def commit_tracking_files(path)
|
103
|
+
tracking_files = TrackingFiles.new(path)
|
104
|
+
committed = tracking_files.commit("[multirepo] Updated tracking files manually")
|
105
|
+
Console.log_info("Committed tracking files") if committed
|
106
|
+
end
|
107
|
+
|
102
108
|
def show_diff(path)
|
103
109
|
GitRunner.run_as_system(path, "diff .multirepo.lock")
|
104
110
|
end
|
data/lib/multirepo/info.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
require "multirepo/utility/utils"
|
2
|
+
|
3
|
+
module MultiRepo
|
4
|
+
class RepoSelection
|
5
|
+
ALL = 0
|
6
|
+
MAIN = 1
|
7
|
+
DEPS = 2
|
8
|
+
|
9
|
+
def initialize(argv)
|
10
|
+
@main = argv.flag?("main")
|
11
|
+
@deps = argv.flag?("deps")
|
12
|
+
@all = argv.flag?("all")
|
13
|
+
end
|
14
|
+
|
15
|
+
def valid?
|
16
|
+
Utils.only_one_true?(@main, @deps, @all)
|
17
|
+
end
|
18
|
+
|
19
|
+
def value
|
20
|
+
return MAIN if @main
|
21
|
+
return DEPS if @deps
|
22
|
+
return ALL # Default if unspecified
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,34 +1,22 @@
|
|
1
|
+
require_relative "revision-selection"
|
2
|
+
|
1
3
|
module MultiRepo
|
2
|
-
class RevisionSelectionMode
|
3
|
-
AS_LOCK = 0
|
4
|
-
LATEST = 1
|
5
|
-
EXACT = 2
|
6
|
-
|
7
|
-
def self.name_for_mode(mode)
|
8
|
-
case mode
|
9
|
-
when AS_LOCK then "as-lock"
|
10
|
-
when LATEST then "latest"
|
11
|
-
when EXACT then "exact"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
4
|
class RevisionSelector
|
17
5
|
def self.mode_for_args(checkout_latest, checkout_exact)
|
18
6
|
if checkout_latest
|
19
|
-
|
7
|
+
RevisionSelection::LATEST
|
20
8
|
elsif checkout_exact
|
21
|
-
|
9
|
+
RevisionSelection::EXACT
|
22
10
|
else
|
23
|
-
|
11
|
+
RevisionSelection::AS_LOCK
|
24
12
|
end
|
25
13
|
end
|
26
14
|
|
27
15
|
def self.revision_for_mode(mode, ref_name, lock_entry)
|
28
16
|
case mode
|
29
|
-
when
|
30
|
-
when
|
31
|
-
when
|
17
|
+
when RevisionSelection::AS_LOCK then lock_entry.head
|
18
|
+
when RevisionSelection::LATEST then lock_entry.branch
|
19
|
+
when RevisionSelection::EXACT then ref_name
|
32
20
|
end
|
33
21
|
end
|
34
22
|
end
|
@@ -3,6 +3,10 @@ require "fileutils"
|
|
3
3
|
|
4
4
|
module MultiRepo
|
5
5
|
class Utils
|
6
|
+
def self.only_one_true?(*flags)
|
7
|
+
flags.reduce(0) { |count, flag| count += 1 if flag; count } <= 1
|
8
|
+
end
|
9
|
+
|
6
10
|
def self.path_for_resource(resource_name)
|
7
11
|
gem_path = Gem::Specification.find_by_name("git-multirepo").gem_dir
|
8
12
|
File.join(gem_path, "resources/#{resource_name}")
|
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.
|
4
|
+
version: 1.0.0.beta51
|
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-07-
|
11
|
+
date: 2015-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -197,6 +197,8 @@ files:
|
|
197
197
|
- lib/multirepo/logic/merge-descriptor.rb
|
198
198
|
- lib/multirepo/logic/node.rb
|
199
199
|
- lib/multirepo/logic/performer.rb
|
200
|
+
- lib/multirepo/logic/repo-selection.rb
|
201
|
+
- lib/multirepo/logic/revision-selection.rb
|
200
202
|
- lib/multirepo/logic/revision-selector.rb
|
201
203
|
- lib/multirepo/multirepo-exception.rb
|
202
204
|
- lib/multirepo/utility/console.rb
|