git-multirepo 1.0.0.beta38 → 1.0.0.beta39
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.multirepo.meta +1 -1
- data/Gemfile.lock +5 -1
- data/README.md +2 -1
- data/docs/git-multirepo-cheatsheet.docx +0 -0
- data/git-multirepo.gemspec +1 -0
- data/lib/commands.rb +1 -0
- data/lib/info.rb +1 -1
- data/lib/multirepo/commands/branch-command.rb +38 -21
- data/lib/multirepo/commands/checkout-command.rb +3 -1
- data/lib/multirepo/commands/command.rb +4 -0
- data/lib/multirepo/commands/graph-command.rb +46 -0
- data/lib/multirepo/commands/init-command.rb +1 -1
- data/lib/multirepo/commands/merge-command.rb +3 -1
- data/lib/multirepo/commands/open-command.rb +38 -7
- data/lib/multirepo/commands/uninit-command.rb +1 -1
- data/lib/multirepo/commands/update-command.rb +3 -2
- data/lib/multirepo/files/tracking-files.rb +19 -14
- data/lib/multirepo/git/branch.rb +5 -2
- data/lib/multirepo/git/git-runner.rb +9 -1
- data/lib/multirepo/hooks/post-commit-hook.rb +1 -1
- data/lib/multirepo/hooks/pre-commit-hook.rb +4 -2
- data/lib/multirepo/logic/node.rb +4 -0
- data/lib/multirepo/utility/utils.rb +16 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94c594ab8e4c0338d3e5e70bb31d4315c1b7fbf0
|
4
|
+
data.tar.gz: 0a9b1e7b957e605d17a053abc01c262f7c3c56fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4179388b91395ade82973ab214327ea34560c3a39d06db5eb4bc6e9461309f39f9ab47611bfb82bfd88f27336a758120c24ea520c6e3b3be3a687ea8ce6b7715
|
7
|
+
data.tar.gz: 7ab8047c6256c0001a317d19e398bb0d4093e57f6bd9b7d9bf89339bc39603539ab70513d5c032f049b58219d922fe18c289246809d4182ec96b79954c2d977d
|
data/.multirepo.meta
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
--- !ruby/object:MultiRepo::MetaFile
|
2
|
-
version: 1.0.0.
|
2
|
+
version: 1.0.0.beta38
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
git-multirepo (1.0.0.
|
4
|
+
git-multirepo (1.0.0.beta38)
|
5
5
|
claide (~> 0.8, >= 0.8.0)
|
6
6
|
colored (~> 1.2)
|
7
7
|
os (~> 0.9.6)
|
8
|
+
ruby-graphviz (~> 1.2.1)
|
9
|
+
terminal-table (~> 1.4.5)
|
8
10
|
|
9
11
|
GEM
|
10
12
|
remote: https://rubygems.org/
|
@@ -26,6 +28,8 @@ GEM
|
|
26
28
|
rspec-mocks (3.1.3)
|
27
29
|
rspec-support (~> 3.1.0)
|
28
30
|
rspec-support (3.1.2)
|
31
|
+
ruby-graphviz (1.2.2)
|
32
|
+
terminal-table (1.4.5)
|
29
33
|
|
30
34
|
PLATFORMS
|
31
35
|
ruby
|
data/README.md
CHANGED
@@ -123,9 +123,10 @@ Here is a quick rundown of commands available to you in git-multirepo:
|
|
123
123
|
| clean | Performs a 'git clean -df' on the main repo and all dependencies. |
|
124
124
|
| clone | Clones the specified repository in a subfolder, then installs it. |
|
125
125
|
| fetch | Performs a git fetch on all dependencies. |
|
126
|
+
| graph | Graphs the dependency tree from the current repository. |
|
126
127
|
| install | Clones and checks out dependencies as defined in the version-controlled multirepo metadata files and installs git-multirepo's local git hooks. |
|
127
128
|
| merge | Performs a git merge on all dependencies and the main repo, in the proper order. |
|
128
|
-
| open | Opens
|
129
|
+
| open | Opens repositories in the OS's file explorer. |
|
129
130
|
| remove | Removes the specified dependency from multirepo. |
|
130
131
|
| update | Force-updates the multirepo tracking files. |
|
131
132
|
| uninit | Removes all traces of multirepo in the current multirepo repository. |
|
Binary file
|
data/git-multirepo.gemspec
CHANGED
data/lib/commands.rb
CHANGED
@@ -5,6 +5,7 @@ require_relative "multirepo/commands/checkout-command"
|
|
5
5
|
require_relative "multirepo/commands/clean-command"
|
6
6
|
require_relative "multirepo/commands/clone-command"
|
7
7
|
require_relative "multirepo/commands/fetch-command"
|
8
|
+
require_relative "multirepo/commands/graph-command"
|
8
9
|
require_relative "multirepo/commands/init-command"
|
9
10
|
require_relative "multirepo/commands/install-command"
|
10
11
|
require_relative "multirepo/commands/merge-command"
|
data/lib/info.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "multirepo/utility/console"
|
2
2
|
require "multirepo/files/config-file"
|
3
3
|
require "multirepo/files/tracking-files"
|
4
|
+
require "multirepo/logic/performer"
|
4
5
|
|
5
6
|
module MultiRepo
|
6
7
|
class BranchCommand < Command
|
@@ -11,14 +12,14 @@ module MultiRepo
|
|
11
12
|
[
|
12
13
|
['<branch name>', 'The name of the branch to create and checkout.'],
|
13
14
|
['[--force]', 'Force creating the branch even if the repos contain uncommmitted changes.'],
|
14
|
-
['[--no-
|
15
|
+
['[--no-push]', 'Do not push the branch on creation.']
|
15
16
|
].concat(super)
|
16
17
|
end
|
17
18
|
|
18
19
|
def initialize(argv)
|
19
20
|
@branch_name = argv.shift_argument
|
20
21
|
@force = argv.flag?("force")
|
21
|
-
@remote_tracking = argv.flag?("
|
22
|
+
@remote_tracking = argv.flag?("push", true)
|
22
23
|
super
|
23
24
|
end
|
24
25
|
|
@@ -35,32 +36,48 @@ module MultiRepo
|
|
35
36
|
Console.log_step("Branching...")
|
36
37
|
|
37
38
|
main_repo = Repo.new(".")
|
38
|
-
config_file = ConfigFile.new(".")
|
39
|
-
repos = config_file.load_entries.map{ |entry| entry.repo }.push(main_repo)
|
40
39
|
|
41
|
-
|
42
|
-
|
40
|
+
# Ensure the main repo is clean
|
41
|
+
raise MultiRepoException, "Main repo is not clean; multi branch aborted" unless main_repo.clean?
|
42
|
+
|
43
|
+
# Ensure dependencies are clean
|
44
|
+
config_entries = ConfigFile.new(".").load_entries
|
45
|
+
unless Utils.ensure_dependencies_clean(config_entries)
|
46
|
+
raise MultiRepoException, "Dependencies are not clean; multi branch aborted"
|
43
47
|
end
|
44
48
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
else
|
49
|
-
Console.log_substep("Branching and checking out '#{repo.path}' #{@branch_name} (not pushed) ...")
|
50
|
-
end
|
51
|
-
|
52
|
-
branch = repo.branch(@branch_name)
|
53
|
-
branch.create(@remote_tracking) unless branch.exists?
|
54
|
-
branch.checkout
|
49
|
+
# Branch dependencies
|
50
|
+
Performer.perform_on_dependencies do |config_entry, lock_entry|
|
51
|
+
perform_branch(config_entry.repo)
|
55
52
|
end
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
53
|
+
|
54
|
+
# Branch the main repo
|
55
|
+
perform_branch(main_repo)
|
56
|
+
|
61
57
|
Console.log_step("Done!")
|
62
58
|
rescue MultiRepoException => e
|
63
59
|
Console.log_error(e.message)
|
64
60
|
end
|
61
|
+
|
62
|
+
def perform_branch(repo)
|
63
|
+
Console.log_substep("Branching '#{repo.path}' ...")
|
64
|
+
Console.log_info("Creating and checking out branch #{@branch_name} ...")
|
65
|
+
|
66
|
+
branch = repo.branch(@branch_name)
|
67
|
+
branch.create unless branch.exists?
|
68
|
+
branch.checkout
|
69
|
+
|
70
|
+
if Utils.is_multirepo_enabled(repo.path)
|
71
|
+
Console.log_info("Updating and committing tracking files")
|
72
|
+
tracking_files = TrackingFiles.new(repo.path)
|
73
|
+
tracking_files.update
|
74
|
+
tracking_files.commit("[multirepo] Post-branch tracking files update")
|
75
|
+
end
|
76
|
+
|
77
|
+
if @remote_tracking
|
78
|
+
Console.log_info("Pushing #{@branch_name} to origin/#{@branch_name}")
|
79
|
+
repo.branch(@branch_name).push
|
80
|
+
end
|
81
|
+
end
|
65
82
|
end
|
66
83
|
end
|
@@ -25,7 +25,9 @@ module MultiRepo
|
|
25
25
|
def validate!
|
26
26
|
super
|
27
27
|
help! "You must specify a branch or commit id to checkout" unless @ref
|
28
|
-
|
28
|
+
unless validate_only_one_flag(@checkout_latest, @checkout_exact)
|
29
|
+
help! "You can't provide more than one operation modifier (--latest, --exact, etc.)"
|
30
|
+
end
|
29
31
|
end
|
30
32
|
|
31
33
|
def run
|
@@ -54,6 +54,10 @@ module MultiRepo
|
|
54
54
|
def multirepo_enabled_dependencies
|
55
55
|
ConfigFile.new(".").load_entries.select { |e| Utils.is_multirepo_enabled(e.repo.path) }
|
56
56
|
end
|
57
|
+
|
58
|
+
def validate_only_one_flag(*flags)
|
59
|
+
flags.reduce(0) { |count, flag| count += 1 if flag; count } <= 1
|
60
|
+
end
|
57
61
|
|
58
62
|
def ensure_in_work_tree
|
59
63
|
repo = Repo.new(".")
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require "os"
|
2
|
+
require "graphviz"
|
3
|
+
|
4
|
+
require "multirepo/utility/utils"
|
5
|
+
require "multirepo/utility/console"
|
6
|
+
require "multirepo/logic/node"
|
7
|
+
|
8
|
+
module MultiRepo
|
9
|
+
class GraphCommand < Command
|
10
|
+
self.command = "graph"
|
11
|
+
self.summary = "Graphs the dependency tree from the current repository."
|
12
|
+
|
13
|
+
def run
|
14
|
+
super
|
15
|
+
ensure_in_work_tree
|
16
|
+
ensure_multirepo_enabled
|
17
|
+
|
18
|
+
root = Node.new(".")
|
19
|
+
graph = GraphViz.new(:G, :type => :digraph)
|
20
|
+
build_graph_recursive(graph, root)
|
21
|
+
|
22
|
+
path = File.expand_path("~/Desktop/#{root.name}-graph.png")
|
23
|
+
|
24
|
+
begin
|
25
|
+
graph.output(:png => path)
|
26
|
+
Utils.open_in_default_app(path)
|
27
|
+
rescue StandardError => e
|
28
|
+
Console.log_error(e.message)
|
29
|
+
raise MultiRepoException, "Could not generate graph image because an error occurred during graph generation"
|
30
|
+
end
|
31
|
+
|
32
|
+
Console.log_step("Generated graph image #{path}")
|
33
|
+
rescue MultiRepoException => e
|
34
|
+
Console.log_error(e.message)
|
35
|
+
end
|
36
|
+
|
37
|
+
def build_graph_recursive(graph, node)
|
38
|
+
parent_graph_node = graph.add_nodes(node.name)
|
39
|
+
node.children.each do |child_node|
|
40
|
+
child_graph_node = graph.add_nodes(child_node.name)
|
41
|
+
graph.add_edges(parent_graph_node, child_graph_node)
|
42
|
+
build_graph_recursive(graph, child_node)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -77,7 +77,7 @@ module MultiRepo
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def update_gitattributes_step
|
80
|
-
TrackingFiles
|
80
|
+
TrackingFiles.new(".").files.each do |f|
|
81
81
|
filename = f.filename
|
82
82
|
regex_escaped_filename = Regexp.quote(filename)
|
83
83
|
Utils.append_if_missing("./.gitattributes", /^#{regex_escaped_filename} .*/, "#{filename} merge=ours")
|
@@ -29,7 +29,9 @@ module MultiRepo
|
|
29
29
|
def validate!
|
30
30
|
super
|
31
31
|
help! "You must specify a ref to merge" unless @ref
|
32
|
-
|
32
|
+
unless validate_only_one_flag(@checkout_latest, @checkout_exact)
|
33
|
+
help! "You can't provide more than one operation modifier (--latest, --exact, etc.)"
|
34
|
+
end
|
33
35
|
end
|
34
36
|
|
35
37
|
def run
|
@@ -6,22 +6,53 @@ require "multirepo/utility/utils"
|
|
6
6
|
module MultiRepo
|
7
7
|
class OpenCommand < Command
|
8
8
|
self.command = "open"
|
9
|
-
self.summary = "Opens
|
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
|
10
30
|
|
11
31
|
def run
|
12
32
|
super
|
13
33
|
ensure_in_work_tree
|
14
34
|
ensure_multirepo_enabled
|
15
35
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
36
|
+
if @main_only
|
37
|
+
open_main
|
38
|
+
elsif @all
|
39
|
+
open_dependencies
|
40
|
+
open_main
|
41
|
+
else
|
42
|
+
open_dependencies
|
22
43
|
end
|
23
44
|
rescue MultiRepoException => e
|
24
45
|
Console.log_error(e.message)
|
25
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
|
26
57
|
end
|
27
58
|
end
|
@@ -41,7 +41,8 @@ module MultiRepo
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def update_lock_file_step(log_message)
|
44
|
-
|
44
|
+
tracking_files = TrackingFiles.new(".")
|
45
|
+
changed = tracking_files.update
|
45
46
|
|
46
47
|
if changed
|
47
48
|
Console.log_substep("Updated tracking files")
|
@@ -50,7 +51,7 @@ module MultiRepo
|
|
50
51
|
end
|
51
52
|
|
52
53
|
if @commit
|
53
|
-
committed =
|
54
|
+
committed = tracking_files.commit("[multirepo] Updated tracking files manually")
|
54
55
|
Console.log_substep("Committed tracking files") if committed
|
55
56
|
elsif changed
|
56
57
|
Console.log_substep(log_message)
|
@@ -4,39 +4,44 @@ require_relative "lock-file"
|
|
4
4
|
|
5
5
|
module MultiRepo
|
6
6
|
class TrackingFiles
|
7
|
-
|
7
|
+
attr_accessor :files
|
8
8
|
|
9
|
-
def
|
9
|
+
def initialize(path)
|
10
|
+
@path = path
|
11
|
+
@files = [MetaFile.new(path), LockFile.new(path)]
|
12
|
+
end
|
13
|
+
|
14
|
+
def update
|
10
15
|
updated = false
|
11
|
-
|
16
|
+
files.each { |f| updated |= f.update }
|
12
17
|
return updated
|
13
18
|
end
|
14
19
|
|
15
|
-
def
|
16
|
-
GitRunner.
|
20
|
+
def stage
|
21
|
+
GitRunner.run_in_working_dir(@path, "add --force -- #{files_pathspec}", Runner::Verbosity::OUTPUT_ON_ERROR)
|
17
22
|
end
|
18
23
|
|
19
|
-
def
|
24
|
+
def commit(message)
|
20
25
|
stage
|
21
26
|
|
22
|
-
output = GitRunner.
|
27
|
+
output = GitRunner.run_in_working_dir(@path, "ls-files --modified --others -- #{files_pathspec}", Runner::Verbosity::OUTPUT_NEVER)
|
23
28
|
files_are_untracked_or_modified = output.strip != ""
|
24
29
|
|
25
|
-
output = GitRunner.
|
30
|
+
output = GitRunner.run_in_working_dir(@path, "diff --name-only --cached -- #{files_pathspec}", Runner::Verbosity::OUTPUT_NEVER)
|
26
31
|
files_are_staged = output.strip != ""
|
27
32
|
|
28
33
|
must_commit = files_are_untracked_or_modified || files_are_staged
|
29
|
-
GitRunner.
|
30
|
-
|
34
|
+
GitRunner.run_in_working_dir(@path, "commit --no-verify -m \"#{message}\" --only -- #{files_pathspec}", Runner::Verbosity::OUTPUT_ON_ERROR) if must_commit
|
35
|
+
|
31
36
|
return must_commit
|
32
37
|
end
|
33
38
|
|
34
|
-
def
|
35
|
-
|
39
|
+
def delete
|
40
|
+
files.each { |f| FileUtils.rm_f(f.file) }
|
36
41
|
end
|
37
42
|
|
38
|
-
def
|
39
|
-
|
43
|
+
def files_pathspec
|
44
|
+
files.map{ |f| File.basename(f.file) }.join(" ")
|
40
45
|
end
|
41
46
|
end
|
42
47
|
end
|
data/lib/multirepo/git/branch.rb
CHANGED
@@ -15,9 +15,12 @@ module MultiRepo
|
|
15
15
|
branch_names.include?(@name)
|
16
16
|
end
|
17
17
|
|
18
|
-
def create
|
18
|
+
def create
|
19
19
|
GitRunner.run_in_working_dir(@repo.path, "branch #{@name}", Runner::Verbosity::OUTPUT_ON_ERROR)
|
20
|
-
|
20
|
+
end
|
21
|
+
|
22
|
+
def push
|
23
|
+
GitRunner.run_in_working_dir(@repo.path, "push -u origin #{@name}", Runner::Verbosity::OUTPUT_ON_ERROR)
|
21
24
|
end
|
22
25
|
|
23
26
|
def checkout
|
@@ -13,7 +13,15 @@ module MultiRepo
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.run_in_working_dir(path, git_command, verbosity)
|
16
|
-
|
16
|
+
if path == "."
|
17
|
+
# It is always better to skip -C when running git commands in the
|
18
|
+
# current directory (especially in hooks). Doing this prevents
|
19
|
+
# any future issues because we automatically fallback to non-"-C" for ".".
|
20
|
+
# Fixes bug: https://www.pivotaltracker.com/story/show/94505654
|
21
|
+
return run_in_current_dir(git_command, verbosity)
|
22
|
+
else
|
23
|
+
full_command = "#{git_executable} -C \"#{path}\" #{git_command}";
|
24
|
+
end
|
17
25
|
|
18
26
|
# True fix for the -C flag issue in pre-commit hook where the status command would
|
19
27
|
# fail to provide correct results if a pathspec was provided when performing a commit.
|
@@ -11,7 +11,7 @@ module MultiRepo
|
|
11
11
|
Console.log_step("Performing post-commit operations...")
|
12
12
|
|
13
13
|
# Works around bug #91565510 (https://www.pivotaltracker.com/story/show/91565510)
|
14
|
-
TrackingFiles.stage
|
14
|
+
TrackingFiles.new(".").stage
|
15
15
|
Console.log_info("Cleaned-up staging area")
|
16
16
|
|
17
17
|
exit 0 # Success!
|
@@ -17,8 +17,10 @@ module MultiRepo
|
|
17
17
|
exit 1
|
18
18
|
end
|
19
19
|
|
20
|
-
TrackingFiles.
|
21
|
-
|
20
|
+
tracking_files = TrackingFiles.new(".")
|
21
|
+
tracking_files.update
|
22
|
+
tracking_files.stage
|
23
|
+
|
22
24
|
Console.log_info("Updated and staged tracking files")
|
23
25
|
|
24
26
|
exit 0 # Success!
|
data/lib/multirepo/logic/node.rb
CHANGED
@@ -54,6 +54,22 @@ module MultiRepo
|
|
54
54
|
components.join(File::ALT_SEPARATOR)
|
55
55
|
end
|
56
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
|
+
|
57
73
|
def self.append_if_missing(path, pattern, string_to_append)
|
58
74
|
unless File.exists?(path)
|
59
75
|
File.open(path, 'w') { |f| f.puts(string_to_append) }
|
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.beta39
|
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-
|
11
|
+
date: 2015-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -114,6 +114,20 @@ dependencies:
|
|
114
114
|
- - ~>
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: 1.4.5
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: ruby-graphviz
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ~>
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 1.2.1
|
124
|
+
type: :runtime
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ~>
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 1.2.1
|
117
131
|
description: Track multiple Git repositories side-by-side.
|
118
132
|
email:
|
119
133
|
- fortinmike@irradiated.net
|
@@ -151,6 +165,7 @@ files:
|
|
151
165
|
- lib/multirepo/commands/clone-command.rb
|
152
166
|
- lib/multirepo/commands/command.rb
|
153
167
|
- lib/multirepo/commands/fetch-command.rb
|
168
|
+
- lib/multirepo/commands/graph-command.rb
|
154
169
|
- lib/multirepo/commands/init-command.rb
|
155
170
|
- lib/multirepo/commands/install-command.rb
|
156
171
|
- lib/multirepo/commands/merge-command.rb
|