git-multirepo 1.0.0.beta5 → 1.0.0.beta6
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/.gitignore +38 -38
- data/.rspec +2 -2
- data/Gemfile +4 -4
- data/Gemfile.lock +37 -37
- data/LICENSE +22 -22
- data/README.md +135 -133
- data/Rakefile +2 -2
- data/bin/multi +5 -5
- data/git-multirepo.gemspec +29 -29
- data/lib/commands.rb +10 -10
- data/lib/info.rb +4 -4
- data/lib/multirepo/commands/add.rb +40 -40
- data/lib/multirepo/commands/checkout.rb +63 -63
- data/lib/multirepo/commands/command.rb +40 -40
- data/lib/multirepo/commands/edit.rb +21 -21
- data/lib/multirepo/commands/fetch.rb +23 -23
- data/lib/multirepo/commands/init.rb +53 -53
- data/lib/multirepo/commands/install.rb +64 -64
- data/lib/multirepo/commands/open.rb +25 -25
- data/lib/multirepo/commands/remove.rb +41 -41
- data/lib/multirepo/commands/uninit.rb +20 -20
- data/lib/multirepo/commands/update.rb +23 -23
- data/lib/multirepo/config.rb +12 -12
- data/lib/multirepo/files/config-entry.rb +37 -37
- data/lib/multirepo/files/config-file.rb +37 -37
- data/lib/multirepo/files/lock-entry.rb +25 -25
- data/lib/multirepo/files/lock-file.rb +34 -34
- data/lib/multirepo/git/branch.rb +16 -16
- data/lib/multirepo/git/change.rb +10 -10
- data/lib/multirepo/git/git.rb +38 -38
- data/lib/multirepo/git/remote.rb +15 -15
- data/lib/multirepo/git/repo.rb +66 -66
- data/lib/multirepo/hooks/pre-commit-hook.rb +24 -24
- data/lib/multirepo/multirepo-exception.rb +5 -5
- data/lib/multirepo/utility/console.rb +51 -51
- data/lib/multirepo/utility/runner.rb +20 -20
- data/lib/multirepo/utility/utils.rb +36 -36
- data/resources/pre-commit +5 -5
- data/spec/integration/{init-spec.rb → init_spec.rb} +22 -22
- data/spec/spec_helper.rb +89 -89
- metadata +6 -6
data/lib/multirepo/config.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
require "singleton"
|
2
|
-
|
3
|
-
module MultiRepo
|
4
|
-
class Config
|
5
|
-
include Singleton
|
6
|
-
|
7
|
-
attr_accessor :verbose
|
8
|
-
@verbose = false
|
9
|
-
|
10
|
-
attr_accessor :running_git_hook
|
11
|
-
@running_git_hook = false
|
12
|
-
end
|
1
|
+
require "singleton"
|
2
|
+
|
3
|
+
module MultiRepo
|
4
|
+
class Config
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
attr_accessor :verbose
|
8
|
+
@verbose = false
|
9
|
+
|
10
|
+
attr_accessor :running_git_hook
|
11
|
+
@running_git_hook = false
|
12
|
+
end
|
13
13
|
end
|
@@ -1,38 +1,38 @@
|
|
1
|
-
require "securerandom"
|
2
|
-
|
3
|
-
require "multirepo/utility/console"
|
4
|
-
require "multirepo/git/repo"
|
5
|
-
|
6
|
-
module MultiRepo
|
7
|
-
class ConfigEntry
|
8
|
-
attr_accessor :id
|
9
|
-
attr_accessor :path
|
10
|
-
attr_accessor :url
|
11
|
-
attr_accessor :branch
|
12
|
-
attr_accessor :repo
|
13
|
-
|
14
|
-
def encode_with(coder)
|
15
|
-
coder["id"] = @id
|
16
|
-
coder["path"] = @path
|
17
|
-
coder["url"] = @url
|
18
|
-
coder["branch"] = @branch
|
19
|
-
end
|
20
|
-
|
21
|
-
def ==(entry)
|
22
|
-
entry_path = Pathname.new(entry.path)
|
23
|
-
self_path = Pathname.new(self.path)
|
24
|
-
entry_path.exist? && self_path.exist? && entry_path.realpath == self_path.realpath
|
25
|
-
end
|
26
|
-
|
27
|
-
def initialize(repo)
|
28
|
-
@id = SecureRandom.uuid
|
29
|
-
@path = repo.path
|
30
|
-
@url = repo.exists? ? repo.remote('origin').url : nil
|
31
|
-
@branch = repo.exists? ? repo.current_branch : nil
|
32
|
-
end
|
33
|
-
|
34
|
-
def repo
|
35
|
-
Repo.new(path)
|
36
|
-
end
|
37
|
-
end
|
1
|
+
require "securerandom"
|
2
|
+
|
3
|
+
require "multirepo/utility/console"
|
4
|
+
require "multirepo/git/repo"
|
5
|
+
|
6
|
+
module MultiRepo
|
7
|
+
class ConfigEntry
|
8
|
+
attr_accessor :id
|
9
|
+
attr_accessor :path
|
10
|
+
attr_accessor :url
|
11
|
+
attr_accessor :branch
|
12
|
+
attr_accessor :repo
|
13
|
+
|
14
|
+
def encode_with(coder)
|
15
|
+
coder["id"] = @id
|
16
|
+
coder["path"] = @path
|
17
|
+
coder["url"] = @url
|
18
|
+
coder["branch"] = @branch
|
19
|
+
end
|
20
|
+
|
21
|
+
def ==(entry)
|
22
|
+
entry_path = Pathname.new(entry.path)
|
23
|
+
self_path = Pathname.new(self.path)
|
24
|
+
entry_path.exist? && self_path.exist? && entry_path.realpath == self_path.realpath
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize(repo)
|
28
|
+
@id = SecureRandom.uuid
|
29
|
+
@path = repo.path
|
30
|
+
@url = repo.exists? ? repo.remote('origin').url : nil
|
31
|
+
@branch = repo.exists? ? repo.current_branch : nil
|
32
|
+
end
|
33
|
+
|
34
|
+
def repo
|
35
|
+
Repo.new(path)
|
36
|
+
end
|
37
|
+
end
|
38
38
|
end
|
@@ -1,38 +1,38 @@
|
|
1
|
-
require "fileutils"
|
2
|
-
require "pathname"
|
3
|
-
|
4
|
-
require_relative "config-entry"
|
5
|
-
|
6
|
-
module MultiRepo
|
7
|
-
class ConfigFile
|
8
|
-
FILE = Pathname.new(".multirepo")
|
9
|
-
|
10
|
-
def self.exists?
|
11
|
-
FILE.exist?
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.load
|
15
|
-
Psych.load(FILE.read)
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.save(entries)
|
19
|
-
File.write(FILE.to_s, Psych.dump(entries))
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.entry_exists?(entry)
|
23
|
-
load.any? { |e| e == entry }
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.add_entry(entry)
|
27
|
-
save(load.push(entry))
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.remove_entry(entry)
|
31
|
-
save(load.delete_if { |e| e == entry })
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.stage
|
35
|
-
Git.run_in_current_dir("add -A -f #{FILE.to_s}", false)
|
36
|
-
end
|
37
|
-
end
|
1
|
+
require "fileutils"
|
2
|
+
require "pathname"
|
3
|
+
|
4
|
+
require_relative "config-entry"
|
5
|
+
|
6
|
+
module MultiRepo
|
7
|
+
class ConfigFile
|
8
|
+
FILE = Pathname.new(".multirepo")
|
9
|
+
|
10
|
+
def self.exists?
|
11
|
+
FILE.exist?
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.load
|
15
|
+
Psych.load(FILE.read)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.save(entries)
|
19
|
+
File.write(FILE.to_s, Psych.dump(entries))
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.entry_exists?(entry)
|
23
|
+
load.any? { |e| e == entry }
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.add_entry(entry)
|
27
|
+
save(load.push(entry))
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.remove_entry(entry)
|
31
|
+
save(load.delete_if { |e| e == entry })
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.stage
|
35
|
+
Git.run_in_current_dir("add -A -f #{FILE.to_s}", false)
|
36
|
+
end
|
37
|
+
end
|
38
38
|
end
|
@@ -1,26 +1,26 @@
|
|
1
|
-
require "multirepo/utility/console"
|
2
|
-
require "multirepo/git/repo"
|
3
|
-
|
4
|
-
module MultiRepo
|
5
|
-
class LockEntry
|
6
|
-
attr_accessor :config_entry
|
7
|
-
attr_accessor :name
|
8
|
-
attr_accessor :id
|
9
|
-
attr_accessor :head
|
10
|
-
attr_accessor :branch
|
11
|
-
|
12
|
-
def encode_with(coder)
|
13
|
-
coder["name"] = @name
|
14
|
-
coder["id"] = @id
|
15
|
-
coder["head"] = @head
|
16
|
-
coder["branch"] = @branch
|
17
|
-
end
|
18
|
-
|
19
|
-
def initialize(config_entry)
|
20
|
-
@name = config_entry.repo.basename
|
21
|
-
@id = config_entry.id
|
22
|
-
@head = config_entry.repo.head_hash
|
23
|
-
@branch = config_entry.repo.current_branch
|
24
|
-
end
|
25
|
-
end
|
1
|
+
require "multirepo/utility/console"
|
2
|
+
require "multirepo/git/repo"
|
3
|
+
|
4
|
+
module MultiRepo
|
5
|
+
class LockEntry
|
6
|
+
attr_accessor :config_entry
|
7
|
+
attr_accessor :name
|
8
|
+
attr_accessor :id
|
9
|
+
attr_accessor :head
|
10
|
+
attr_accessor :branch
|
11
|
+
|
12
|
+
def encode_with(coder)
|
13
|
+
coder["name"] = @name
|
14
|
+
coder["id"] = @id
|
15
|
+
coder["head"] = @head
|
16
|
+
coder["branch"] = @branch
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(config_entry)
|
20
|
+
@name = config_entry.repo.basename
|
21
|
+
@id = config_entry.id
|
22
|
+
@head = config_entry.repo.head_hash
|
23
|
+
@branch = config_entry.repo.current_branch
|
24
|
+
end
|
25
|
+
end
|
26
26
|
end
|
@@ -1,35 +1,35 @@
|
|
1
|
-
require "pathname"
|
2
|
-
require "psych"
|
3
|
-
|
4
|
-
require "multirepo/git/git"
|
5
|
-
require_relative "lock-entry"
|
6
|
-
require_relative "config-file"
|
7
|
-
|
8
|
-
module MultiRepo
|
9
|
-
class LockFile
|
10
|
-
FILE = Pathname.new(".multirepo.lock")
|
11
|
-
|
12
|
-
def self.exists?
|
13
|
-
FILE.exist?
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.load
|
17
|
-
Psych.load(FILE.read)
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.update
|
21
|
-
config_entries = ConfigFile.load
|
22
|
-
lock_entries = config_entries.map { |c| LockEntry.new(c) }
|
23
|
-
|
24
|
-
File.write(FILE.to_s, Psych.dump(lock_entries))
|
25
|
-
|
26
|
-
Git.run_in_current_dir("add -A
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.validate_components(line, components)
|
30
|
-
unless components.count == 2
|
31
|
-
raise MultiRepoException, "Wrong entry format in .multirepo.lock file: #{line}"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
1
|
+
require "pathname"
|
2
|
+
require "psych"
|
3
|
+
|
4
|
+
require "multirepo/git/git"
|
5
|
+
require_relative "lock-entry"
|
6
|
+
require_relative "config-file"
|
7
|
+
|
8
|
+
module MultiRepo
|
9
|
+
class LockFile
|
10
|
+
FILE = Pathname.new(".multirepo.lock")
|
11
|
+
|
12
|
+
def self.exists?
|
13
|
+
FILE.exist?
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.load
|
17
|
+
Psych.load(FILE.read)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.update
|
21
|
+
config_entries = ConfigFile.load
|
22
|
+
lock_entries = config_entries.map { |c| LockEntry.new(c) }
|
23
|
+
|
24
|
+
File.write(FILE.to_s, Psych.dump(lock_entries))
|
25
|
+
|
26
|
+
Git.run_in_current_dir("add -A #{FILE.to_s}", false)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.validate_components(line, components)
|
30
|
+
unless components.count == 2
|
31
|
+
raise MultiRepoException, "Wrong entry format in .multirepo.lock file: #{line}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
35
|
end
|
data/lib/multirepo/git/branch.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
-
require_relative "git"
|
2
|
-
|
3
|
-
module MultiRepo
|
4
|
-
class Branch
|
5
|
-
attr_accessor :name
|
6
|
-
|
7
|
-
def initialize(repo, name)
|
8
|
-
@repo = repo
|
9
|
-
@name = name
|
10
|
-
end
|
11
|
-
|
12
|
-
def checkout
|
13
|
-
Git.run_in_working_dir(@repo.path, "checkout #{@name}", false)
|
14
|
-
Git.last_command_succeeded
|
15
|
-
end
|
16
|
-
end
|
1
|
+
require_relative "git"
|
2
|
+
|
3
|
+
module MultiRepo
|
4
|
+
class Branch
|
5
|
+
attr_accessor :name
|
6
|
+
|
7
|
+
def initialize(repo, name)
|
8
|
+
@repo = repo
|
9
|
+
@name = name
|
10
|
+
end
|
11
|
+
|
12
|
+
def checkout
|
13
|
+
Git.run_in_working_dir(@repo.path, "checkout #{@name}", false)
|
14
|
+
Git.last_command_succeeded
|
15
|
+
end
|
16
|
+
end
|
17
17
|
end
|
data/lib/multirepo/git/change.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
module MultiRepo
|
2
|
-
class Change
|
3
|
-
attr_accessor :status
|
4
|
-
attr_accessor :path
|
5
|
-
|
6
|
-
def initialize(line)
|
7
|
-
@status = line[0...2].strip
|
8
|
-
@path = line[3..-1]
|
9
|
-
end
|
10
|
-
end
|
1
|
+
module MultiRepo
|
2
|
+
class Change
|
3
|
+
attr_accessor :status
|
4
|
+
attr_accessor :path
|
5
|
+
|
6
|
+
def initialize(line)
|
7
|
+
@status = line[0...2].strip
|
8
|
+
@path = line[3..-1]
|
9
|
+
end
|
10
|
+
end
|
11
11
|
end
|
data/lib/multirepo/git/git.rb
CHANGED
@@ -1,39 +1,39 @@
|
|
1
|
-
require "multirepo/utility/runner"
|
2
|
-
require "multirepo/git/git"
|
3
|
-
require "multirepo/config"
|
4
|
-
|
5
|
-
module MultiRepo
|
6
|
-
class Git
|
7
|
-
class << self
|
8
|
-
attr_accessor :last_command_succeeded
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.run_in_current_dir(git_command, show_output)
|
12
|
-
full_command = "git #{git_command}"
|
13
|
-
run(full_command, show_output)
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.run_in_working_dir(path, git_command, show_output)
|
17
|
-
full_command = "git -C \"#{path}\" #{git_command}";
|
18
|
-
|
19
|
-
# True fix for the -C flag issue in pre-commit hook where the status command would
|
20
|
-
# fail to provide correct results if a pathspec was provided when performing a commit.
|
21
|
-
# http://thread.gmane.org/gmane.comp.version-control.git/263319/focus=263323
|
22
|
-
full_command = "sh -c 'unset $(git rev-parse --local-env-vars); #{full_command};'" if Config.instance.running_git_hook
|
23
|
-
|
24
|
-
run(full_command, show_output)
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.run(full_command, show_output)
|
28
|
-
Console.log_info(full_command) if Config.instance.verbose
|
29
|
-
result = Runner.run(full_command, show_output)
|
30
|
-
@last_command_succeeded = Runner.last_command_succeeded
|
31
|
-
return result
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.is_inside_git_repo(path)
|
35
|
-
return false unless Dir.exist?("#{path}/.git")
|
36
|
-
return Git.run_in_working_dir(path, "rev-parse --is-inside-work-tree", false).strip == "true"
|
37
|
-
end
|
38
|
-
end
|
1
|
+
require "multirepo/utility/runner"
|
2
|
+
require "multirepo/git/git"
|
3
|
+
require "multirepo/config"
|
4
|
+
|
5
|
+
module MultiRepo
|
6
|
+
class Git
|
7
|
+
class << self
|
8
|
+
attr_accessor :last_command_succeeded
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.run_in_current_dir(git_command, show_output)
|
12
|
+
full_command = "git #{git_command}"
|
13
|
+
run(full_command, show_output)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.run_in_working_dir(path, git_command, show_output)
|
17
|
+
full_command = "git -C \"#{path}\" #{git_command}";
|
18
|
+
|
19
|
+
# True fix for the -C flag issue in pre-commit hook where the status command would
|
20
|
+
# fail to provide correct results if a pathspec was provided when performing a commit.
|
21
|
+
# http://thread.gmane.org/gmane.comp.version-control.git/263319/focus=263323
|
22
|
+
full_command = "sh -c 'unset $(git rev-parse --local-env-vars); #{full_command};'" if Config.instance.running_git_hook
|
23
|
+
|
24
|
+
run(full_command, show_output)
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.run(full_command, show_output)
|
28
|
+
Console.log_info(full_command) if Config.instance.verbose
|
29
|
+
result = Runner.run(full_command, show_output)
|
30
|
+
@last_command_succeeded = Runner.last_command_succeeded
|
31
|
+
return result
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.is_inside_git_repo(path)
|
35
|
+
return false unless Dir.exist?("#{path}/.git")
|
36
|
+
return Git.run_in_working_dir(path, "rev-parse --is-inside-work-tree", false).strip == "true"
|
37
|
+
end
|
38
|
+
end
|
39
39
|
end
|
data/lib/multirepo/git/remote.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
|
-
require_relative "git"
|
2
|
-
|
3
|
-
module MultiRepo
|
4
|
-
class Remote
|
5
|
-
attr_accessor :name
|
6
|
-
|
7
|
-
def initialize(repo, name)
|
8
|
-
@repo = repo
|
9
|
-
@name = name
|
10
|
-
end
|
11
|
-
|
12
|
-
def url
|
13
|
-
Git.run_in_working_dir(@repo.path, "config --get remote.#{@name}.url", false).strip
|
14
|
-
end
|
15
|
-
end
|
1
|
+
require_relative "git"
|
2
|
+
|
3
|
+
module MultiRepo
|
4
|
+
class Remote
|
5
|
+
attr_accessor :name
|
6
|
+
|
7
|
+
def initialize(repo, name)
|
8
|
+
@repo = repo
|
9
|
+
@name = name
|
10
|
+
end
|
11
|
+
|
12
|
+
def url
|
13
|
+
Git.run_in_working_dir(@repo.path, "config --get remote.#{@name}.url", false).strip
|
14
|
+
end
|
15
|
+
end
|
16
16
|
end
|