git-multirepo 1.0.0.beta47 → 1.0.0.beta48
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/.rubocop.yml +79 -0
- data/Rakefile +0 -1
- data/bin/multi +1 -1
- data/git-multirepo.gemspec +1 -1
- data/lib/commands.rb +1 -1
- data/lib/git-multirepo.rb +1 -1
- data/lib/info.rb +2 -2
- data/lib/multirepo/commands/add-command.rb +4 -4
- data/lib/multirepo/commands/branch-command.rb +8 -8
- data/lib/multirepo/commands/checkout-command.rb +7 -7
- data/lib/multirepo/commands/clone-command.rb +6 -6
- data/lib/multirepo/commands/command.rb +9 -9
- data/lib/multirepo/commands/do-command.rb +3 -3
- data/lib/multirepo/commands/graph-command.rb +1 -1
- data/lib/multirepo/commands/init-command.rb +14 -13
- data/lib/multirepo/commands/inspect-command.rb +2 -2
- data/lib/multirepo/commands/install-command.rb +5 -5
- data/lib/multirepo/commands/merge-command.rb +11 -12
- data/lib/multirepo/commands/open-command.rb +1 -1
- data/lib/multirepo/commands/remove-command.rb +2 -2
- data/lib/multirepo/commands/uninit-command.rb +1 -1
- data/lib/multirepo/commands/update-command.rb +21 -11
- data/lib/multirepo/config.rb +1 -1
- data/lib/multirepo/files/config-entry.rb +5 -5
- data/lib/multirepo/files/config-file.rb +2 -2
- data/lib/multirepo/files/lock-entry.rb +1 -1
- data/lib/multirepo/files/lock-file.rb +2 -2
- data/lib/multirepo/files/meta-file.rb +1 -1
- data/lib/multirepo/files/tracking-file.rb +2 -2
- data/lib/multirepo/files/tracking-files.rb +1 -1
- data/lib/multirepo/git/branch.rb +2 -2
- data/lib/multirepo/git/change.rb +1 -1
- data/lib/multirepo/git/commit.rb +1 -1
- data/lib/multirepo/git/git-runner.rb +2 -4
- data/lib/multirepo/git/git.rb +1 -1
- data/lib/multirepo/git/ref.rb +2 -2
- data/lib/multirepo/git/remote.rb +1 -1
- data/lib/multirepo/git/repo.rb +6 -6
- data/lib/multirepo/hooks/post-commit-hook.rb +1 -1
- data/lib/multirepo/hooks/pre-commit-hook.rb +1 -1
- data/lib/multirepo/logic/dependency.rb +1 -1
- data/lib/multirepo/logic/merge-descriptor.rb +11 -11
- data/lib/multirepo/logic/node.rb +9 -9
- data/lib/multirepo/logic/performer.rb +6 -8
- data/lib/multirepo/logic/revision-selector.rb +9 -9
- data/lib/multirepo/multirepo-exception.rb +1 -1
- data/lib/multirepo/utility/console.rb +2 -2
- data/lib/multirepo/utility/popen-runner.rb +2 -2
- data/lib/multirepo/utility/system-runner.rb +1 -1
- data/lib/multirepo/utility/utils.rb +15 -15
- data/lib/multirepo/utility/verbosity.rb +1 -1
- data/resources/post-commit +1 -1
- data/resources/pre-commit +1 -1
- data/spec/integration/init_spec.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b62e381f56fa28e1019ec5ee90f527e3d6c0caf9
|
4
|
+
data.tar.gz: c3a9718b7a7bf951b3c7ff3e7f4b41e80c010a0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0595de8789ec53bccb911f904a5f86ab53530f15db76b2986ffb14f11dd2a150912d063cb191573eb760ff0a98191dcd1d90ff6befd813f25df0de54ea2db6e
|
7
|
+
data.tar.gz: 7c97e0eba324fee9bead97e3928919986b94575103b8aacb5fa885080062a114c1d2da18e5094af254af97f775296d72a4af043d918c0b62202f9aece2e8c534
|
data/.multirepo.meta
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
--- !ruby/object:MultiRepo::MetaFile
|
2
|
-
version: 1.0.0.
|
2
|
+
version: 1.0.0.beta47
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# This is the configuration used to check the rubocop source code.
|
2
|
+
|
3
|
+
AllCops:
|
4
|
+
DisplayCopNames: true
|
5
|
+
Exclude:
|
6
|
+
- 'resources/*'
|
7
|
+
- 'pkg/*'
|
8
|
+
- 'docs/*'
|
9
|
+
- 'spec/spec_helper.rb'
|
10
|
+
- 'spec/fixtures/**/*'
|
11
|
+
|
12
|
+
Style/RescueModifier:
|
13
|
+
Enabled: false
|
14
|
+
|
15
|
+
Lint/EndAlignment:
|
16
|
+
Enabled: false
|
17
|
+
|
18
|
+
Metrics/MethodLength:
|
19
|
+
Enabled: false
|
20
|
+
|
21
|
+
Metrics/LineLength:
|
22
|
+
Enabled: false
|
23
|
+
|
24
|
+
Style/EachWithObject:
|
25
|
+
Enabled: false
|
26
|
+
|
27
|
+
Style/Documentation:
|
28
|
+
Enabled: false
|
29
|
+
|
30
|
+
Style/GuardClause:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
Style/RedundantReturn:
|
34
|
+
Enabled: false
|
35
|
+
|
36
|
+
Style/SpaceBeforeBlockBraces:
|
37
|
+
Enabled: false
|
38
|
+
|
39
|
+
Style/StringLiterals:
|
40
|
+
Enabled: false
|
41
|
+
|
42
|
+
Style/TrailingWhitespace:
|
43
|
+
Enabled: false
|
44
|
+
|
45
|
+
Metrics/AbcSize:
|
46
|
+
Enabled: false
|
47
|
+
|
48
|
+
Metrics/ClassLength:
|
49
|
+
Enabled: false
|
50
|
+
|
51
|
+
Style/ElseAlignment:
|
52
|
+
Enabled: false
|
53
|
+
|
54
|
+
Style/HashSyntax:
|
55
|
+
Enabled: false
|
56
|
+
|
57
|
+
Style/MultilineOperationIndentation:
|
58
|
+
Enabled: false
|
59
|
+
|
60
|
+
Style/Semicolon:
|
61
|
+
AllowAsExpressionSeparator: true
|
62
|
+
|
63
|
+
Style/IndentationWidth:
|
64
|
+
Enabled: false
|
65
|
+
|
66
|
+
Style/SingleLineBlockParams:
|
67
|
+
Enabled: false
|
68
|
+
|
69
|
+
Metrics/CyclomaticComplexity:
|
70
|
+
Max: 10
|
71
|
+
|
72
|
+
Metrics/PerceivedComplexity:
|
73
|
+
Max: 8
|
74
|
+
|
75
|
+
Style/FileName:
|
76
|
+
Enabled: false
|
77
|
+
|
78
|
+
Style/SpecialGlobalVars:
|
79
|
+
Enabled: false
|
data/Rakefile
CHANGED
data/bin/multi
CHANGED
data/git-multirepo.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = MultiRepo::VERSION
|
9
9
|
spec.authors = ["Michaël Fortin"]
|
10
10
|
spec.email = ["fortinmike@irradiated.net"]
|
11
|
-
spec.summary =
|
11
|
+
spec.summary = "Track multiple Git repositories side-by-side"
|
12
12
|
spec.description = MultiRepo::DESCRIPTION
|
13
13
|
spec.homepage = "https://github.com/fortinmike/git-multirepo"
|
14
14
|
spec.license = "MIT"
|
data/lib/commands.rb
CHANGED
@@ -12,4 +12,4 @@ require_relative "multirepo/commands/merge-command"
|
|
12
12
|
require_relative "multirepo/commands/open-command"
|
13
13
|
require_relative "multirepo/commands/remove-command"
|
14
14
|
require_relative "multirepo/commands/uninit-command"
|
15
|
-
require_relative "multirepo/commands/update-command"
|
15
|
+
require_relative "multirepo/commands/update-command"
|
data/lib/git-multirepo.rb
CHANGED
data/lib/info.rb
CHANGED
@@ -37,9 +37,9 @@ module MultiRepo
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def ensure_repo_valid
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
fail MultiRepoException, "The provided path is not a direct sibling of the main repository" unless validate_is_sibling_repo(@path)
|
41
|
+
fail MultiRepoException, "There is no folder at path '#{@path}'" unless Dir.exist?(@path)
|
42
|
+
fail MultiRepoException, "'#{@path}' is not a repository" unless Repo.new(@path).exists?
|
43
43
|
end
|
44
44
|
|
45
45
|
def validate_is_sibling_repo(path)
|
@@ -48,4 +48,4 @@ module MultiRepo
|
|
48
48
|
return parent_dir == path
|
49
49
|
end
|
50
50
|
end
|
51
|
-
end
|
51
|
+
end
|
@@ -39,12 +39,12 @@ module MultiRepo
|
|
39
39
|
main_repo = Repo.new(".")
|
40
40
|
|
41
41
|
# Ensure the main repo is clean
|
42
|
-
|
42
|
+
fail MultiRepoException, "Main repo is not clean; multi branch aborted" unless main_repo.clean?
|
43
43
|
|
44
44
|
# Ensure dependencies are clean
|
45
45
|
config_entries = ConfigFile.new(".").load_entries
|
46
46
|
unless Utils.dependencies_clean?(config_entries)
|
47
|
-
|
47
|
+
fail MultiRepoException, "Dependencies are not clean; multi branch aborted"
|
48
48
|
end
|
49
49
|
|
50
50
|
# Branch dependencies
|
@@ -66,17 +66,17 @@ module MultiRepo
|
|
66
66
|
branch.create unless branch.exists?
|
67
67
|
branch.checkout
|
68
68
|
|
69
|
-
if Utils.
|
69
|
+
if Utils.multirepo_enabled?(repo.path)
|
70
70
|
Console.log_info("Updating and committing tracking files")
|
71
71
|
tracking_files = TrackingFiles.new(repo.path)
|
72
72
|
tracking_files.update
|
73
73
|
tracking_files.commit("[multirepo] Post-branch tracking files update")
|
74
74
|
end
|
75
75
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
76
|
+
return unless @remote_tracking
|
77
|
+
|
78
|
+
Console.log_info("Pushing #{@branch_name} to origin/#{@branch_name}")
|
79
|
+
repo.branch(@branch_name).push
|
80
80
|
end
|
81
81
|
end
|
82
|
-
end
|
82
|
+
end
|
@@ -42,7 +42,7 @@ module MultiRepo
|
|
42
42
|
main_repo = Repo.new(".")
|
43
43
|
|
44
44
|
unless proceed_if_merge_commit?(main_repo, @ref_name, mode)
|
45
|
-
|
45
|
+
fail MultiRepoException, "Aborting checkout"
|
46
46
|
end
|
47
47
|
|
48
48
|
checkout_core(main_repo, mode)
|
@@ -56,7 +56,7 @@ module MultiRepo
|
|
56
56
|
# Checkout first because the current ref might not be multirepo-enabled
|
57
57
|
checkout_main_repo_step(main_repo)
|
58
58
|
# Only then can we check for dependencies and make sure they are clean
|
59
|
-
ensure_dependencies_clean_step
|
59
|
+
ensure_dependencies_clean_step
|
60
60
|
rescue MultiRepoException => e
|
61
61
|
Console.log_warning("Restoring working copy to #{initial_revision}")
|
62
62
|
main_repo.checkout(initial_revision)
|
@@ -69,9 +69,9 @@ module MultiRepo
|
|
69
69
|
Performer.perform_main_repo_checkout(main_repo, @ref_name)
|
70
70
|
end
|
71
71
|
|
72
|
-
def ensure_dependencies_clean_step
|
72
|
+
def ensure_dependencies_clean_step
|
73
73
|
unless Utils.dependencies_clean?(ConfigFile.new(".").load_entries)
|
74
|
-
|
74
|
+
fail MultiRepoException, "Dependencies are not clean!"
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
@@ -84,7 +84,7 @@ module MultiRepo
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def proceed_if_merge_commit?(main_repo, ref_name, mode)
|
87
|
-
return true unless main_repo.ref(ref_name).
|
87
|
+
return true unless main_repo.ref(ref_name).merge_commit?
|
88
88
|
|
89
89
|
case mode
|
90
90
|
when RevisionSelectionMode::AS_LOCK
|
@@ -113,8 +113,8 @@ module MultiRepo
|
|
113
113
|
if config_entry.repo.checkout(revision)
|
114
114
|
Console.log_substep("Checked out #{dependency_name} '#{revision}'")
|
115
115
|
else
|
116
|
-
|
116
|
+
fail MultiRepoException, "Couldn't check out the appropriate version of dependency #{dependency_name}"
|
117
117
|
end
|
118
118
|
end
|
119
119
|
end
|
120
|
-
end
|
120
|
+
end
|
@@ -32,7 +32,7 @@ module MultiRepo
|
|
32
32
|
def run
|
33
33
|
Console.log_step("Cloning #{@url} ...")
|
34
34
|
|
35
|
-
|
35
|
+
fail MultiRepoException, "A directory named #{@name} already exists" if Dir.exist?(@name)
|
36
36
|
|
37
37
|
main_repo_path = "#{@name}/#{@name}"
|
38
38
|
main_repo = Repo.new(main_repo_path)
|
@@ -41,18 +41,18 @@ module MultiRepo
|
|
41
41
|
FileUtils.mkpath(main_repo_path)
|
42
42
|
|
43
43
|
# Clone the specified remote in the just-created directory
|
44
|
-
|
44
|
+
fail MultiRepoException, "Could not clone repo from #{@url}" unless main_repo.clone(@url)
|
45
45
|
|
46
46
|
# Checkout the specified main repo ref so that install reads the proper config file
|
47
47
|
unless main_repo.checkout(@ref_name)
|
48
|
-
|
48
|
+
fail MultiRepoException, "Couldn't perform checkout of main repo #{@ref_name}!"
|
49
49
|
end
|
50
50
|
|
51
51
|
Console.log_substep("Checked out main repo #{@ref_name}")
|
52
52
|
|
53
53
|
# Make sure the ref we just checked out is tracked by multirepo
|
54
|
-
unless Utils.
|
55
|
-
|
54
|
+
unless Utils.multirepo_tracked?(main_repo_path)
|
55
|
+
fail MultiRepoException, "Ref #{@ref_name} is not tracked by multirepo"
|
56
56
|
end
|
57
57
|
|
58
58
|
# Install
|
@@ -65,4 +65,4 @@ module MultiRepo
|
|
65
65
|
Console.log_step("Done!")
|
66
66
|
end
|
67
67
|
end
|
68
|
-
end
|
68
|
+
end
|
@@ -18,7 +18,7 @@ module MultiRepo
|
|
18
18
|
Console.log_error(exception.message)
|
19
19
|
exit 1
|
20
20
|
end
|
21
|
-
|
21
|
+
fail exception
|
22
22
|
end
|
23
23
|
|
24
24
|
def initialize(argv)
|
@@ -36,7 +36,7 @@ module MultiRepo
|
|
36
36
|
super
|
37
37
|
path = Config.instance.git_executable
|
38
38
|
is_git_exe = path =~ /.*(git)|(git.exe)$/
|
39
|
-
file_exists = path == "git" || File.
|
39
|
+
file_exists = path == "git" || File.exist?(path)
|
40
40
|
help! "Invalid git executable '#{path}'" unless is_git_exe && file_exists
|
41
41
|
end
|
42
42
|
|
@@ -63,7 +63,7 @@ module MultiRepo
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def multirepo_enabled_dependencies
|
66
|
-
ConfigFile.new(".").load_entries.select { |e| Utils.
|
66
|
+
ConfigFile.new(".").load_entries.select { |e| Utils.multirepo_enabled?(e.repo.path) }
|
67
67
|
end
|
68
68
|
|
69
69
|
def validate_only_one_flag(*flags)
|
@@ -72,19 +72,19 @@ module MultiRepo
|
|
72
72
|
|
73
73
|
def ensure_in_work_tree
|
74
74
|
repo = Repo.new(".")
|
75
|
-
|
76
|
-
|
75
|
+
fail MultiRepoException, "Not a git repository" unless repo.exists?
|
76
|
+
fail MultiRepoException, "HEAD is unborn (you must perform at least one commit)" unless repo.head_born?
|
77
77
|
end
|
78
78
|
|
79
79
|
def ensure_multirepo_enabled
|
80
|
-
|
80
|
+
fail MultiRepoException, "multirepo is not initialized in this repository." unless Utils.multirepo_enabled?(".")
|
81
81
|
end
|
82
82
|
|
83
83
|
def ensure_multirepo_tracked
|
84
|
-
|
84
|
+
fail MultiRepoException, "Revision is not tracked by multirepo." unless Utils.multirepo_tracked?(".")
|
85
85
|
|
86
86
|
lock_file_valid = LockFile.new(".").validate!
|
87
|
-
|
87
|
+
fail MultiRepoException, "Revision is multirepo-enabled but contains a corrupted lock file!" unless lock_file_valid
|
88
88
|
end
|
89
89
|
end
|
90
|
-
end
|
90
|
+
end
|
@@ -80,14 +80,14 @@ module MultiRepo
|
|
80
80
|
def confirm_main_repo_operation
|
81
81
|
unless main_repo_clean?
|
82
82
|
Console.log_warning("Main repo contains uncommitted changes")
|
83
|
-
|
83
|
+
fail MultiRepoException, "Aborted" unless Console.ask_yes_no("Proceed anyway?")
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
87
|
def confirm_dependencies_operation
|
88
88
|
unless dependencies_clean?
|
89
89
|
Console.log_warning("Some dependencies contain uncommitted changes")
|
90
|
-
|
90
|
+
fail MultiRepoException, "Aborted" unless Console.ask_yes_no("Proceed anyway?")
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
@@ -100,4 +100,4 @@ module MultiRepo
|
|
100
100
|
return Utils.dependencies_clean?(config_entries)
|
101
101
|
end
|
102
102
|
end
|
103
|
-
end
|
103
|
+
end
|
@@ -37,11 +37,11 @@ module MultiRepo
|
|
37
37
|
def full_initialize_step
|
38
38
|
if ConfigFile.new(".").exists?
|
39
39
|
reinitialize = Console.ask_yes_no(".multirepo file already exists. Reinitialize?")
|
40
|
-
|
40
|
+
fail MultiRepoException, "Initialization aborted" unless reinitialize
|
41
41
|
end
|
42
42
|
|
43
43
|
unless add_sibling_repos_step
|
44
|
-
|
44
|
+
fail MultiRepoException, "There are no sibling repositories to track as dependencies. Initialization aborted."
|
45
45
|
end
|
46
46
|
|
47
47
|
initialize_extras_step
|
@@ -56,7 +56,7 @@ module MultiRepo
|
|
56
56
|
valid_repos = find_valid_repos(sibling_repos)
|
57
57
|
entries = create_entries(valid_repos)
|
58
58
|
|
59
|
-
|
59
|
+
fail MultiRepoException, "No sibling repositories were added as dependencies; init aborted" unless entries.any?
|
60
60
|
|
61
61
|
ConfigFile.new(".").save_entries(entries)
|
62
62
|
return true
|
@@ -100,21 +100,22 @@ module MultiRepo
|
|
100
100
|
origin_url = repo.remote('origin').url
|
101
101
|
current_branch_name = repo.current_branch.name
|
102
102
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
entries.push(ConfigEntry.new(repo))
|
109
|
-
Console.log_substep("Added the repository '#{repo.path}' to the .multirepo file")
|
103
|
+
next unless Console.ask_yes_no("Do you want to add '#{repo.path}' as a dependency?\n [origin: #{origin_url || 'NONE'}, branch: #{current_branch_name}]")
|
104
|
+
|
105
|
+
unless origin_url
|
106
|
+
Console.log_warning("Repo 'origin' remote url is not set; skipping")
|
107
|
+
next
|
110
108
|
end
|
109
|
+
|
110
|
+
entries.push(ConfigEntry.new(repo))
|
111
|
+
Console.log_substep("Added the repository '#{repo.path}' to the .multirepo file")
|
111
112
|
end
|
112
113
|
return entries
|
113
114
|
end
|
114
115
|
|
115
116
|
def check_repo_exists
|
116
|
-
|
117
|
-
|
117
|
+
fail MultiRepoException, "There is no folder at path '#{@repo.path}'" unless Dir.exist?(@repo.path)
|
118
|
+
fail MultiRepoException, "'#{@repo.path}' is not a repository" unless @repo.exists?
|
118
119
|
end
|
119
120
|
end
|
120
|
-
end
|
121
|
+
end
|
@@ -82,7 +82,7 @@ module MultiRepo
|
|
82
82
|
def install_dependencies_step
|
83
83
|
# Read config entries as-is on disk, without prior checkout
|
84
84
|
config_entries = ConfigFile.new(".").load_entries
|
85
|
-
Console.log_substep("Installing #{config_entries.count} dependencies...")
|
85
|
+
Console.log_substep("Installing #{config_entries.count} dependencies...")
|
86
86
|
|
87
87
|
# Clone or fetch all configured dependencies to make sure nothing is missing locally
|
88
88
|
Performer.dependencies.each { |d| clone_or_fetch(d) }
|
@@ -127,13 +127,13 @@ module MultiRepo
|
|
127
127
|
|
128
128
|
def fetch_repo(dependency)
|
129
129
|
unless dependency.config_entry.repo.fetch
|
130
|
-
|
130
|
+
fail MultiRepoException, "Could not fetch from remote #{dependency.config_entry.repo.remote('origin').url}"
|
131
131
|
end
|
132
132
|
end
|
133
133
|
|
134
134
|
def clone_repo(dependency)
|
135
135
|
unless dependency.config_entry.repo.clone(dependency.config_entry.url, dependency.lock_entry.branch)
|
136
|
-
|
136
|
+
fail MultiRepoException, "Could not clone remote #{dependency.config_entry.url} with branch #{dependency.config_entry.branch}"
|
137
137
|
end
|
138
138
|
end
|
139
139
|
|
@@ -141,8 +141,8 @@ module MultiRepo
|
|
141
141
|
|
142
142
|
def check_repo_validity(dependency)
|
143
143
|
unless dependency.config_entry.repo.remote("origin").url == dependency.config_entry.url
|
144
|
-
|
144
|
+
fail MultiRepoException, "'#{dependency.config_entry.path}' origin URL (#{dependency.config_entry.repo.remote('origin').url}) does not match entry (#{dependency.config_entry.url})!"
|
145
145
|
end
|
146
146
|
end
|
147
147
|
end
|
148
|
-
end
|
148
|
+
end
|
@@ -74,14 +74,13 @@ module MultiRepo
|
|
74
74
|
|
75
75
|
def merge_core(main_repo, initial_revision, mode)
|
76
76
|
config_file = ConfigFile.new(".")
|
77
|
-
lock_file = LockFile.new(".")
|
78
77
|
|
79
78
|
# Ensure the main repo is clean
|
80
|
-
|
79
|
+
fail MultiRepoException, "Main repo is not clean; merge aborted" unless main_repo.clean?
|
81
80
|
|
82
81
|
# Ensure dependencies are clean
|
83
82
|
unless Utils.dependencies_clean?(config_file.load_entries)
|
84
|
-
|
83
|
+
fail MultiRepoException, "Dependencies are not clean; merge aborted"
|
85
84
|
end
|
86
85
|
|
87
86
|
ref_name = @ref_name
|
@@ -98,20 +97,20 @@ module MultiRepo
|
|
98
97
|
|
99
98
|
case result.outcome
|
100
99
|
when MergeValidationResult::ABORT
|
101
|
-
|
100
|
+
fail MultiRepoException, result.message
|
102
101
|
when MergeValidationResult::PROCEED
|
103
|
-
|
102
|
+
fail MultiRepoException, "Merge aborted" unless Console.ask_yes_no("Proceed?")
|
104
103
|
Console.log_warning(result.message) if result.message
|
105
104
|
break
|
106
105
|
when MergeValidationResult::MERGE_UPSTREAM
|
107
106
|
Console.log_warning(result.message)
|
108
|
-
|
107
|
+
fail MultiRepoException, "Merge aborted" unless Console.ask_yes_no("Merge upstream instead of local branches?")
|
109
108
|
# TODO: Modify operations!
|
110
|
-
|
109
|
+
fail MultiRepoException, "Fallback behavior not implemented. Please merge manually."
|
111
110
|
next
|
112
111
|
end
|
113
112
|
|
114
|
-
|
113
|
+
fail MultiRepoException, "Merge aborted" unless Console.ask_yes_no("Proceed?")
|
115
114
|
end
|
116
115
|
|
117
116
|
Console.log_step("Performing merge...")
|
@@ -163,13 +162,13 @@ module MultiRepo
|
|
163
162
|
|
164
163
|
def ensure_dependencies_match(our_dependencies, their_dependencies)
|
165
164
|
our_dependencies.zip(their_dependencies).each do |our_dependency, their_dependency|
|
166
|
-
if their_dependency
|
167
|
-
|
165
|
+
if their_dependency.nil? || their_dependency.config_entry.id != our_dependency.config_entry.id
|
166
|
+
fail MultiRepoException, "Dependencies differ, please merge manually"
|
168
167
|
end
|
169
168
|
end
|
170
169
|
|
171
170
|
if their_dependencies.count > our_dependencies.count
|
172
|
-
|
171
|
+
fail MultiRepoException, "There are more dependencies in the specified ref, please merge manually"
|
173
172
|
end
|
174
173
|
end
|
175
174
|
|
@@ -223,4 +222,4 @@ module MultiRepo
|
|
223
222
|
end
|
224
223
|
end
|
225
224
|
end
|
226
|
-
end
|
225
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "multirepo/utility/console"
|
2
|
+
require "multirepo/logic/performer"
|
2
3
|
require "multirepo/files/tracking-files"
|
3
4
|
|
4
5
|
module MultiRepo
|
@@ -26,31 +27,40 @@ module MultiRepo
|
|
26
27
|
Console.log_step("Updating...")
|
27
28
|
|
28
29
|
dependencies_clean = Utils.dependencies_clean?(ConfigFile.new(".").load_entries)
|
29
|
-
if dependencies_clean
|
30
|
-
|
31
|
-
elsif !dependencies_clean && @force
|
32
|
-
update_lock_file_step("Force-updated tracking files (ignoring uncommitted changes)")
|
30
|
+
if dependencies_clean || @force
|
31
|
+
update_tracking_files_step
|
33
32
|
else
|
34
|
-
|
33
|
+
fail MultiRepoException, "Can't update because not all dependencies are clean"
|
35
34
|
end
|
36
35
|
|
37
36
|
Console.log_step("Done!")
|
38
37
|
end
|
39
38
|
|
40
|
-
def
|
41
|
-
|
39
|
+
def update_tracking_files_step
|
40
|
+
Performer.dependencies.each do |dependency|
|
41
|
+
path = dependency.config_entry.path
|
42
|
+
name = dependency.config_entry.name
|
43
|
+
update_tracking_files(path, name) if Utils.multirepo_enabled?(path)
|
44
|
+
end
|
45
|
+
update_tracking_files(".", "main repo")
|
46
|
+
end
|
47
|
+
|
48
|
+
def update_tracking_files(path, name)
|
49
|
+
Console.log_substep("Updating tracking files in #{name}")
|
50
|
+
|
51
|
+
tracking_files = TrackingFiles.new(path)
|
42
52
|
changed = tracking_files.update
|
43
53
|
|
44
54
|
if changed
|
45
|
-
Console.
|
55
|
+
Console.log_info("Updated tracking files")
|
46
56
|
else
|
47
|
-
Console.
|
57
|
+
Console.log_info("Tracking files are already up-to-date")
|
48
58
|
end
|
49
59
|
|
50
60
|
if @commit
|
51
61
|
committed = tracking_files.commit("[multirepo] Updated tracking files manually")
|
52
|
-
Console.
|
62
|
+
Console.log_info("Committed tracking files") if committed
|
53
63
|
end
|
54
64
|
end
|
55
65
|
end
|
56
|
-
end
|
66
|
+
end
|
data/lib/multirepo/config.rb
CHANGED
@@ -22,10 +22,10 @@ module MultiRepo
|
|
22
22
|
@url = repo.exists? ? repo.remote('origin').url : nil
|
23
23
|
end
|
24
24
|
|
25
|
-
def ==(
|
26
|
-
|
27
|
-
self_path = Pathname.new(
|
28
|
-
|
25
|
+
def ==(other)
|
26
|
+
other_path = Pathname.new(other.path)
|
27
|
+
self_path = Pathname.new(path)
|
28
|
+
other_path.exist? && self_path.exist? && other_path.realpath == self_path.realpath
|
29
29
|
end
|
30
30
|
|
31
31
|
def repo
|
@@ -36,4 +36,4 @@ module MultiRepo
|
|
36
36
|
repo.basename
|
37
37
|
end
|
38
38
|
end
|
39
|
-
end
|
39
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module MultiRepo
|
2
2
|
class TrackingFile
|
3
3
|
def update_internal(file, new_content)
|
4
|
-
old_content = File.
|
4
|
+
old_content = File.exist?(file) ? File.read(file) : nil
|
5
5
|
File.write(file, new_content)
|
6
6
|
return new_content != old_content
|
7
7
|
end
|
8
8
|
end
|
9
|
-
end
|
9
|
+
end
|
data/lib/multirepo/git/branch.rb
CHANGED
@@ -5,7 +5,7 @@ module MultiRepo
|
|
5
5
|
class Branch < Ref
|
6
6
|
def exists?
|
7
7
|
lines = GitRunner.run(@repo.path, "branch", Verbosity::OUTPUT_NEVER).split("\n")
|
8
|
-
branch_names = lines.map { |line| line.tr("* ", "")}
|
8
|
+
branch_names = lines.map { |line| line.tr("* ", "") }
|
9
9
|
branch_names.include?(@name)
|
10
10
|
end
|
11
11
|
|
@@ -29,4 +29,4 @@ module MultiRepo
|
|
29
29
|
GitRunner.last_command_succeeded
|
30
30
|
end
|
31
31
|
end
|
32
|
-
end
|
32
|
+
end
|
data/lib/multirepo/git/change.rb
CHANGED
data/lib/multirepo/git/commit.rb
CHANGED
@@ -19,8 +19,6 @@ module MultiRepo
|
|
19
19
|
runner_system(command)
|
20
20
|
end
|
21
21
|
|
22
|
-
private
|
23
|
-
|
24
22
|
def self.build_command(path, git_command)
|
25
23
|
if path == "."
|
26
24
|
# It is always better to skip -C when running git commands in the
|
@@ -30,7 +28,7 @@ module MultiRepo
|
|
30
28
|
return "#{git_executable} #{git_command}"
|
31
29
|
end
|
32
30
|
|
33
|
-
full_command = "#{git_executable} -C \"#{path}\" #{git_command}"
|
31
|
+
full_command = "#{git_executable} -C \"#{path}\" #{git_command}"
|
34
32
|
if Config.instance.running_git_hook
|
35
33
|
# True fix for the -C flag issue in pre-commit hook where the status command would
|
36
34
|
# fail to provide correct results if a pathspec was provided when performing a commit.
|
@@ -55,4 +53,4 @@ module MultiRepo
|
|
55
53
|
Config.instance.git_executable || "git"
|
56
54
|
end
|
57
55
|
end
|
58
|
-
end
|
56
|
+
end
|
data/lib/multirepo/git/git.rb
CHANGED
data/lib/multirepo/git/ref.rb
CHANGED
@@ -22,7 +22,7 @@ module MultiRepo
|
|
22
22
|
GitRunner.run(@repo.path, "rev-parse --short #{@name}", Verbosity::OUTPUT_NEVER).strip
|
23
23
|
end
|
24
24
|
|
25
|
-
def
|
25
|
+
def merge_commit?
|
26
26
|
lines = GitRunner.run(@repo.path, "cat-file -p #{@name}", Verbosity::OUTPUT_NEVER).split("\n")
|
27
27
|
parents = lines.grep(/^parent /)
|
28
28
|
return parents.count > 1
|
@@ -35,4 +35,4 @@ module MultiRepo
|
|
35
35
|
return merge_base_output == rev_parse_output
|
36
36
|
end
|
37
37
|
end
|
38
|
-
end
|
38
|
+
end
|
data/lib/multirepo/git/remote.rb
CHANGED
data/lib/multirepo/git/repo.rb
CHANGED
@@ -34,16 +34,16 @@ module MultiRepo
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def local_branches
|
37
|
-
branches_by_removing_prefix(
|
37
|
+
branches_by_removing_prefix(%r{^refs/heads/})
|
38
38
|
end
|
39
39
|
|
40
40
|
def remote_branches
|
41
|
-
branches_by_removing_prefix(
|
41
|
+
branches_by_removing_prefix(%r{^refs/remotes/})
|
42
42
|
end
|
43
43
|
|
44
44
|
def changes
|
45
45
|
output = GitRunner.run(@path, "status --porcelain", Verbosity::OUTPUT_NEVER)
|
46
|
-
lines = output.split("\n").each
|
46
|
+
lines = output.split("\n").each(&:strip).delete_if{ |f| f == "" }
|
47
47
|
lines.map { |l| Change.new(l) }
|
48
48
|
end
|
49
49
|
|
@@ -55,7 +55,7 @@ module MultiRepo
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def clone(url, branch = nil)
|
58
|
-
if branch
|
58
|
+
if !branch.nil?
|
59
59
|
GitRunner.run_as_system(".", "clone #{url} -b #{branch} #{@path} --progress")
|
60
60
|
else
|
61
61
|
GitRunner.run_as_system(".", "clone #{url} #{@path} --progress")
|
@@ -116,8 +116,8 @@ module MultiRepo
|
|
116
116
|
all_refs = all_refs.map { |l| l.sub(/^\'/, "").sub(/\'$/, "") }
|
117
117
|
|
118
118
|
full_names = all_refs.select { |r| r =~ prefix_regex }
|
119
|
-
names = full_names.map{ |f| f.sub(prefix_regex, "") }.delete_if{ |n| n =~ /HEAD$/}
|
119
|
+
names = full_names.map{ |f| f.sub(prefix_regex, "") }.delete_if{ |n| n =~ /HEAD$/ }
|
120
120
|
names.map { |b| Branch.new(self, b) }
|
121
121
|
end
|
122
122
|
end
|
123
|
-
end
|
123
|
+
end
|
@@ -35,20 +35,20 @@ module MultiRepo
|
|
35
35
|
|
36
36
|
def merge_description
|
37
37
|
case @state
|
38
|
-
when TheirState::NON_EXISTENT
|
38
|
+
when TheirState::NON_EXISTENT then "No revision named #{@their_revision}".red
|
39
39
|
else; "Merge '#{@state == TheirState::EXACT_REF ? @short_commit_id : @their_revision}' into '#{@our_revision}'"
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
def upstream_description
|
44
44
|
case @state
|
45
|
-
when TheirState::NON_EXISTENT
|
46
|
-
when TheirState::EXACT_REF
|
47
|
-
when TheirState::LOCAL_NO_UPSTREAM
|
48
|
-
when TheirState::UPSTREAM_NO_LOCAL
|
49
|
-
when TheirState::LOCAL_UP_TO_DATE
|
50
|
-
when TheirState::LOCAL_OUTDATED
|
51
|
-
when TheirState::LOCAL_UPSTREAM_DIVERGED
|
45
|
+
when TheirState::NON_EXISTENT then "--"
|
46
|
+
when TheirState::EXACT_REF then "Exact ref".yellow
|
47
|
+
when TheirState::LOCAL_NO_UPSTREAM then "Not remote-tracking".yellow
|
48
|
+
when TheirState::UPSTREAM_NO_LOCAL then "Branch is upstream".green
|
49
|
+
when TheirState::LOCAL_UP_TO_DATE then "Local up-to-date with upstream".green
|
50
|
+
when TheirState::LOCAL_OUTDATED then "Local outdated compared to upstream".yellow
|
51
|
+
when TheirState::LOCAL_UPSTREAM_DIVERGED then "Local and upstream have diverged!".red
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -57,8 +57,8 @@ module MultiRepo
|
|
57
57
|
def determine_merge_state(repo, their_ref)
|
58
58
|
return TheirState::NON_EXISTENT unless their_ref.exists?
|
59
59
|
|
60
|
-
remote_branch = repo.remote_branches.
|
61
|
-
local_branch = repo.local_branches.
|
60
|
+
remote_branch = repo.remote_branches.find { |b| b.name == their_ref.name }
|
61
|
+
local_branch = repo.local_branches.find { |b| b.name == their_ref.name }
|
62
62
|
|
63
63
|
# If no local branch nor remote branch exist for their_ref, this is an exact ref
|
64
64
|
return TheirState::EXACT_REF unless remote_branch || local_branch
|
@@ -92,4 +92,4 @@ module MultiRepo
|
|
92
92
|
return state
|
93
93
|
end
|
94
94
|
end
|
95
|
-
end
|
95
|
+
end
|
data/lib/multirepo/logic/node.rb
CHANGED
@@ -17,7 +17,7 @@ module MultiRepo
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def children
|
20
|
-
return [] unless Utils.
|
20
|
+
return [] unless Utils.multirepo_enabled?(@path)
|
21
21
|
config_entries = ConfigFile.new(@path).load_entries
|
22
22
|
return config_entries.map { |e| Node.new(e.path, self, @depth + 1) }
|
23
23
|
end
|
@@ -29,13 +29,13 @@ module MultiRepo
|
|
29
29
|
def ordered_descendants
|
30
30
|
descendants = find_descendants_recursive(self)
|
31
31
|
|
32
|
-
unique_paths = descendants.map
|
32
|
+
unique_paths = descendants.map(&:path).uniq
|
33
33
|
unique_nodes = unique_paths.collect do |path|
|
34
34
|
nodes_for_path = descendants.select { |d| d.path == path }
|
35
|
-
next nodes_for_path.
|
35
|
+
next nodes_for_path.sort_by(&:depth).first
|
36
36
|
end
|
37
37
|
|
38
|
-
return unique_nodes.sort_by
|
38
|
+
return unique_nodes.sort_by(&:depth).reverse
|
39
39
|
end
|
40
40
|
|
41
41
|
def find_descendants_recursive(node)
|
@@ -58,15 +58,15 @@ module MultiRepo
|
|
58
58
|
description = "itself" if visited.count == 1
|
59
59
|
Console.log_warning("'#{n.path}' depends on #{description}")
|
60
60
|
end
|
61
|
-
|
61
|
+
fail MultiRepoException, "Dependency cycles are not supported by multirepo."
|
62
62
|
end
|
63
63
|
parent = parent.parent # Will eventually be nil (root node), which will break out of the loop
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
-
def ==(
|
68
|
-
|
69
|
-
|
67
|
+
def ==(other)
|
68
|
+
other.class == self.class &&
|
69
|
+
other.path == @path
|
70
70
|
end
|
71
71
|
end
|
72
|
-
end
|
72
|
+
end
|
@@ -8,19 +8,19 @@ module MultiRepo
|
|
8
8
|
def self.perform_main_repo_checkout(main_repo, ref_name, message = nil)
|
9
9
|
# Make sure the main repo is clean before attempting a checkout
|
10
10
|
unless main_repo.clean?
|
11
|
-
|
11
|
+
fail MultiRepoException, "Can't checkout #{ref_name} because the main repo contains uncommitted changes"
|
12
12
|
end
|
13
13
|
|
14
14
|
# Checkout the specified ref
|
15
15
|
unless main_repo.checkout(ref_name)
|
16
|
-
|
16
|
+
fail MultiRepoException, "Couldn't perform checkout of main repo #{ref_name}!"
|
17
17
|
end
|
18
18
|
|
19
19
|
Console.log_substep(message || "Checked out main repo #{ref_name}")
|
20
20
|
|
21
21
|
# After checkout, make sure we're working with a multirepo-enabled ref
|
22
|
-
unless Utils.
|
23
|
-
|
22
|
+
unless Utils.multirepo_tracked?(".")
|
23
|
+
fail MultiRepoException, "Revision #{ref_name} is not tracked by multirepo!"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -32,12 +32,10 @@ module MultiRepo
|
|
32
32
|
dependency_ordered_nodes = Node.new(".").ordered_descendants
|
33
33
|
|
34
34
|
return dependency_ordered_nodes.map do |node|
|
35
|
-
|
35
|
+
dependencies.find { |d| d.config_entry.path == node.path }
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
private
|
40
|
-
|
41
39
|
def self.build_dependencies(config_entries, lock_entries)
|
42
40
|
lock_entries.map do |lock_entry|
|
43
41
|
config_entry = config_entry_for_lock_entry(config_entries, lock_entry)
|
@@ -54,4 +52,4 @@ module MultiRepo
|
|
54
52
|
config_entries.find { |config_entry| config_entry.id == lock_entry.id }
|
55
53
|
end
|
56
54
|
end
|
57
|
-
end
|
55
|
+
end
|
@@ -6,18 +6,18 @@ module MultiRepo
|
|
6
6
|
|
7
7
|
def self.name_for_mode(mode)
|
8
8
|
case mode
|
9
|
-
when AS_LOCK
|
10
|
-
when LATEST
|
11
|
-
when EXACT
|
9
|
+
when AS_LOCK then "as-lock"
|
10
|
+
when LATEST then "latest"
|
11
|
+
when EXACT then "exact"
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
class RevisionSelector
|
17
17
|
def self.mode_for_args(checkout_latest, checkout_exact)
|
18
|
-
if checkout_latest
|
18
|
+
if checkout_latest
|
19
19
|
RevisionSelectionMode::LATEST
|
20
|
-
elsif checkout_exact
|
20
|
+
elsif checkout_exact
|
21
21
|
RevisionSelectionMode::EXACT
|
22
22
|
else
|
23
23
|
RevisionSelectionMode::AS_LOCK
|
@@ -26,10 +26,10 @@ module MultiRepo
|
|
26
26
|
|
27
27
|
def self.revision_for_mode(mode, ref_name, lock_entry)
|
28
28
|
case mode
|
29
|
-
when RevisionSelectionMode::AS_LOCK
|
30
|
-
when RevisionSelectionMode::LATEST
|
31
|
-
when RevisionSelectionMode::EXACT
|
29
|
+
when RevisionSelectionMode::AS_LOCK then lock_entry.head
|
30
|
+
when RevisionSelectionMode::LATEST then lock_entry.branch
|
31
|
+
when RevisionSelectionMode::EXACT then ref_name
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
35
|
-
end
|
35
|
+
end
|
@@ -29,7 +29,7 @@ module MultiRepo
|
|
29
29
|
|
30
30
|
def self.ask_yes_no(message)
|
31
31
|
answered = false
|
32
|
-
|
32
|
+
until answered
|
33
33
|
print_prefix
|
34
34
|
print message
|
35
35
|
print " (y/n) "
|
@@ -49,4 +49,4 @@ module MultiRepo
|
|
49
49
|
print $stdout.isatty ? "> ".white : "[multirepo] "
|
50
50
|
end
|
51
51
|
end
|
52
|
-
end
|
52
|
+
end
|
@@ -9,7 +9,7 @@ module MultiRepo
|
|
9
9
|
|
10
10
|
lines = []
|
11
11
|
last_command_succeeded = false
|
12
|
-
Open3.popen2e(cmd) do |
|
12
|
+
Open3.popen2e(cmd) do |_stdin, stdout_and_stderr, thread|
|
13
13
|
stdout_and_stderr.each do |line|
|
14
14
|
print line if Config.instance.verbose
|
15
15
|
lines << line
|
@@ -24,4 +24,4 @@ module MultiRepo
|
|
24
24
|
return output, last_command_succeeded
|
25
25
|
end
|
26
26
|
end
|
27
|
-
end
|
27
|
+
end
|
@@ -8,12 +8,12 @@ module MultiRepo
|
|
8
8
|
File.join(gem_path, "resources/#{resource_name}")
|
9
9
|
end
|
10
10
|
|
11
|
-
def self.
|
12
|
-
File.
|
11
|
+
def self.multirepo_enabled?(path)
|
12
|
+
File.exist?(File.join(path, ".multirepo"))
|
13
13
|
end
|
14
14
|
|
15
|
-
def self.
|
16
|
-
|
15
|
+
def self.multirepo_tracked?(path)
|
16
|
+
multirepo_enabled?(path) && File.exist?(File.join(path, ".multirepo.lock"))
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.install_hook(name, path)
|
@@ -25,7 +25,7 @@ module MultiRepo
|
|
25
25
|
|
26
26
|
def self.sibling_repos
|
27
27
|
sibling_directories = Dir['../*/']
|
28
|
-
sibling_repos = sibling_directories.map{ |d| Repo.new(d) }.select
|
28
|
+
sibling_repos = sibling_directories.map{ |d| Repo.new(d) }.select(&:exists?)
|
29
29
|
sibling_repos.delete_if{ |r| Pathname.new(r.path).realpath == Pathname.new(".").realpath }
|
30
30
|
end
|
31
31
|
|
@@ -46,8 +46,8 @@ module MultiRepo
|
|
46
46
|
Console.log_warning("Dependency '#{e.repo.path}' contains uncommitted changes") unless dependency_clean
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
|
-
|
49
|
+
fail MultiRepoException, "Some dependencies are not present on this machine." \
|
50
|
+
" Run \"multi install\" to clone missing dependencies." if missing
|
51
51
|
|
52
52
|
return clean
|
53
53
|
end
|
@@ -69,27 +69,27 @@ module MultiRepo
|
|
69
69
|
|
70
70
|
def self.reveal_in_default_file_browser(unix_path)
|
71
71
|
if OS.osx?
|
72
|
-
system %
|
72
|
+
system %(open "#{unix_path}")
|
73
73
|
elsif OS.windows?
|
74
|
-
system %
|
74
|
+
system %(explorer "#{Utils.convert_to_windows_path(unix_path)}")
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
78
|
def self.open_in_default_app(unix_path)
|
79
79
|
if OS.osx?
|
80
|
-
system %
|
80
|
+
system %(open "#{unix_path}")
|
81
81
|
elsif OS.windows?
|
82
|
-
system %
|
82
|
+
system %(cmd /c "start C:\\#{Utils.convert_to_windows_path(unix_path)}")
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
86
|
def self.append_if_missing(path, pattern, string_to_append)
|
87
|
-
|
88
|
-
File.open(path, 'w') { |f| f.puts(string_to_append) }
|
89
|
-
else
|
87
|
+
if File.exist?(path)
|
90
88
|
string_located = File.readlines(path).grep(pattern).any?
|
91
89
|
File.open(path, 'a') { |f| f.puts(string_to_append) } unless string_located
|
90
|
+
else
|
91
|
+
File.open(path, 'w') { |f| f.puts(string_to_append) }
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end
|
95
|
-
end
|
95
|
+
end
|
data/resources/post-commit
CHANGED
data/resources/pre-commit
CHANGED
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.beta48
|
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-06-
|
11
|
+
date: 2015-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -143,6 +143,7 @@ files:
|
|
143
143
|
- .multirepo.lock
|
144
144
|
- .multirepo.meta
|
145
145
|
- .rspec
|
146
|
+
- .rubocop.yml
|
146
147
|
- Gemfile
|
147
148
|
- Gemfile.lock
|
148
149
|
- LICENSE
|