git-multirepo 1.0.0.beta9 → 1.0.0.beta10

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +38 -38
  3. data/.rspec +2 -2
  4. data/Gemfile +4 -4
  5. data/Gemfile.lock +37 -37
  6. data/LICENSE +22 -22
  7. data/README.md +136 -136
  8. data/Rakefile +2 -2
  9. data/bin/multi +5 -5
  10. data/git-multirepo.gemspec +29 -29
  11. data/lib/commands.rb +11 -11
  12. data/lib/info.rb +4 -4
  13. data/lib/multirepo/commands/add-command.rb +40 -40
  14. data/lib/multirepo/commands/branch-command.rb +43 -50
  15. data/lib/multirepo/commands/checkout-command.rb +66 -66
  16. data/lib/multirepo/commands/command.rb +40 -40
  17. data/lib/multirepo/commands/edit-command.rb +21 -21
  18. data/lib/multirepo/commands/fetch-command.rb +23 -23
  19. data/lib/multirepo/commands/init-command.rb +53 -53
  20. data/lib/multirepo/commands/install-command.rb +64 -64
  21. data/lib/multirepo/commands/open-command.rb +25 -25
  22. data/lib/multirepo/commands/remove-command.rb +41 -41
  23. data/lib/multirepo/commands/uninit-command.rb +20 -20
  24. data/lib/multirepo/commands/update-command.rb +43 -33
  25. data/lib/multirepo/config.rb +12 -12
  26. data/lib/multirepo/files/config-entry.rb +37 -37
  27. data/lib/multirepo/files/config-file.rb +37 -37
  28. data/lib/multirepo/files/lock-entry.rb +25 -25
  29. data/lib/multirepo/files/lock-file.rb +38 -38
  30. data/lib/multirepo/git/branch.rb +27 -27
  31. data/lib/multirepo/git/change.rb +10 -10
  32. data/lib/multirepo/git/git.rb +38 -38
  33. data/lib/multirepo/git/remote.rb +15 -15
  34. data/lib/multirepo/git/repo.rb +66 -66
  35. data/lib/multirepo/hooks/pre-commit-hook.rb +23 -24
  36. data/lib/multirepo/multirepo-exception.rb +5 -5
  37. data/lib/multirepo/utility/console.rb +51 -51
  38. data/lib/multirepo/utility/runner.rb +20 -20
  39. data/lib/multirepo/utility/utils.rb +41 -36
  40. data/resources/pre-commit +5 -5
  41. data/spec/integration/init_spec.rb +22 -22
  42. data/spec/spec_helper.rb +89 -89
  43. metadata +23 -23
@@ -1,22 +1,22 @@
1
- require "os"
2
-
3
- module MultiRepo
4
- class EditCommand < Command
5
- self.command = "edit"
6
- self.summary = "Opens the .multirepo file in the default text editor."
7
-
8
- def run
9
- super
10
- ensure_multirepo_initialized
11
-
12
- if OS.posix?
13
- editor = `echo ${FCEDIT:-${VISUAL:-${EDITOR:-vi}}}`.strip
14
- system(editor, ".multirepo")
15
- elsif OS.windows?
16
- raise MultiRepoException, "The edit command is not implemented on Window yet."
17
- end
18
- rescue MultiRepoException => e
19
- Console.log_error(e.message)
20
- end
21
- end
1
+ require "os"
2
+
3
+ module MultiRepo
4
+ class EditCommand < Command
5
+ self.command = "edit"
6
+ self.summary = "Opens the .multirepo file in the default text editor."
7
+
8
+ def run
9
+ super
10
+ ensure_multirepo_initialized
11
+
12
+ if OS.posix?
13
+ editor = `echo ${FCEDIT:-${VISUAL:-${EDITOR:-vi}}}`.strip
14
+ system(editor, ".multirepo")
15
+ elsif OS.windows?
16
+ raise MultiRepoException, "The edit command is not implemented on Window yet."
17
+ end
18
+ rescue MultiRepoException => e
19
+ Console.log_error(e.message)
20
+ end
21
+ end
22
22
  end
@@ -1,24 +1,24 @@
1
- require "multirepo/utility/console"
2
-
3
- module MultiRepo
4
- class FetchCommand < Command
5
- self.command = "fetch"
6
- self.summary = "Performs a git fetch on all dependencies."
7
-
8
- def run
9
- super
10
- ensure_multirepo_initialized
11
-
12
- Console.log_step("Fetching dependencies...")
13
-
14
- ConfigFile.load.each do |entry|
15
- Console.log_substep("Fetching from #{entry.repo.remote('origin').url}...")
16
- entry.repo.fetch
17
- end
18
-
19
- Console.log_step("Done!")
20
- rescue MultiRepoException => e
21
- Console.log_error(e.message)
22
- end
23
- end
1
+ require "multirepo/utility/console"
2
+
3
+ module MultiRepo
4
+ class FetchCommand < Command
5
+ self.command = "fetch"
6
+ self.summary = "Performs a git fetch on all dependencies."
7
+
8
+ def run
9
+ super
10
+ ensure_multirepo_initialized
11
+
12
+ Console.log_step("Fetching dependencies...")
13
+
14
+ ConfigFile.load.each do |entry|
15
+ Console.log_substep("Fetching from #{entry.repo.remote('origin').url}...")
16
+ entry.repo.fetch
17
+ end
18
+
19
+ Console.log_step("Done!")
20
+ rescue MultiRepoException => e
21
+ Console.log_error(e.message)
22
+ end
23
+ end
24
24
  end
@@ -1,54 +1,54 @@
1
- require "multirepo/utility/console"
2
- require "multirepo/utility/utils"
3
- require "multirepo/files/config-file"
4
- require "multirepo/files/lock-file"
5
- require "multirepo/commands/command"
6
-
7
- module MultiRepo
8
- class InitCommand < Command
9
- self.command = "init"
10
- self.summary = "Initialize the current repository as a multirepo project."
11
-
12
- def run
13
- super
14
- Console.log_step("Initializing new multirepo config...")
15
-
16
- if ConfigFile.exists?
17
- return unless Console.ask_yes_no(".multirepo file already exists. Reinitialize?")
18
- end
19
-
20
- sibling_repos = Utils.sibling_repos
21
-
22
- if sibling_repos.any?
23
- entries = []
24
- sibling_repos.each do |repo|
25
- if Console.ask_yes_no("Do you want to add '#{repo.path}' (#{repo.remote('origin').url} #{repo.current_branch}) as a dependency?")
26
- entries.push(ConfigEntry.new(repo))
27
- Console.log_substep("Added the repository '#{repo.path}' to the .multirepo file")
28
- end
29
- end
30
-
31
- ConfigFile.save(entries)
32
- ConfigFile.stage
33
-
34
- uncommitted = Utils.warn_of_uncommitted_changes(entries)
35
- raise MultiRepoException, "Can't finish initialization!" if uncommitted
36
-
37
- self.update_lock_file
38
- else
39
- Console.log_info("There are no sibling repositories to add")
40
- end
41
-
42
- self.install_pre_commit_hook
43
-
44
- Console.log_step("Done!")
45
- rescue MultiRepoException => e
46
- Console.log_error(e.message)
47
- end
48
-
49
- def check_repo_exists
50
- if !Dir.exists?(@repo.path) then raise MultiRepoException, "There is no folder at path '#{@repo.path}'" end
51
- if !@repo.exists? then raise MultiRepoException, "'#{@repo.path}' is not a repository" end
52
- end
53
- end
1
+ require "multirepo/utility/console"
2
+ require "multirepo/utility/utils"
3
+ require "multirepo/files/config-file"
4
+ require "multirepo/files/lock-file"
5
+ require "multirepo/commands/command"
6
+
7
+ module MultiRepo
8
+ class InitCommand < Command
9
+ self.command = "init"
10
+ self.summary = "Initialize the current repository as a multirepo project."
11
+
12
+ def run
13
+ super
14
+ Console.log_step("Initializing new multirepo config...")
15
+
16
+ if ConfigFile.exists?
17
+ return unless Console.ask_yes_no(".multirepo file already exists. Reinitialize?")
18
+ end
19
+
20
+ sibling_repos = Utils.sibling_repos
21
+
22
+ if sibling_repos.any?
23
+ entries = []
24
+ sibling_repos.each do |repo|
25
+ if Console.ask_yes_no("Do you want to add '#{repo.path}' (#{repo.remote('origin').url} #{repo.current_branch}) as a dependency?")
26
+ entries.push(ConfigEntry.new(repo))
27
+ Console.log_substep("Added the repository '#{repo.path}' to the .multirepo file")
28
+ end
29
+ end
30
+
31
+ ConfigFile.save(entries)
32
+ ConfigFile.stage
33
+
34
+ dependencies_clean = Utils.ensure_dependencies_clean(entries)
35
+ raise MultiRepoException, "Can't finish initialization!" unless dependencies_clean
36
+
37
+ self.update_lock_file
38
+ else
39
+ Console.log_info("There are no sibling repositories to add")
40
+ end
41
+
42
+ self.install_pre_commit_hook
43
+
44
+ Console.log_step("Done!")
45
+ rescue MultiRepoException => e
46
+ Console.log_error(e.message)
47
+ end
48
+
49
+ def check_repo_exists
50
+ if !Dir.exists?(@repo.path) then raise MultiRepoException, "There is no folder at path '#{@repo.path}'" end
51
+ if !@repo.exists? then raise MultiRepoException, "'#{@repo.path}' is not a repository" end
52
+ end
53
+ end
54
54
  end
@@ -1,65 +1,65 @@
1
- require "multirepo/utility/console"
2
- require "multirepo/utility/utils"
3
- require "multirepo/git/repo"
4
-
5
- module MultiRepo
6
- class InstallCommand < Command
7
- self.command = "install"
8
- self.summary = "Clones and checks out dependencies as defined in the .multirepo file, and installs git-multirepo's local pre-commit hook."
9
-
10
- def run
11
- super
12
- ensure_multirepo_initialized
13
-
14
- Console.log_step("Cloning dependencies and installing hook...")
15
-
16
- config_entries = ConfigFile.load
17
-
18
- Console.log_info("There are #{config_entries.count} dependencies to install");
19
-
20
- config_entries.each { |e| install(e) }
21
-
22
- self.install_pre_commit_hook
23
-
24
- Console.log_step("Done!")
25
- rescue MultiRepoException => e
26
- Console.log_error(e.message)
27
- end
28
-
29
- def install(entry)
30
- if entry.repo.exists?
31
- check_repo_validity(entry)
32
- fetch_repo(entry)
33
- else
34
- clone_repo(entry)
35
- end
36
- checkout_branch(entry)
37
- end
38
-
39
- # Repo operations
40
-
41
- def fetch_repo(entry)
42
- Console.log_substep("Working copy '#{entry.repo.path}' already exists, fetching instead...")
43
- raise MultiRepoException, "Could not fetch from remote #{entry.repo.remote('origin').url}" unless entry.repo.fetch
44
- end
45
-
46
- def clone_repo(entry)
47
- Console.log_substep("Cloning '#{entry.url} to #{entry.repo.path}'")
48
- raise MultiRepoException, "Could not clone remote #{entry.url}" unless entry.repo.clone(entry.url)
49
- end
50
-
51
- def checkout_branch(entry)
52
- branch = entry.repo.branch(entry.branch);
53
- raise MultiRepoException, "Could not checkout branch #{branch.name}" unless branch.checkout
54
- Console.log_substep("Checked out branch #{branch.name} -> origin/#{branch.name}")
55
- end
56
-
57
- # Validation
58
-
59
- def check_repo_validity(entry)
60
- unless entry.repo.remote("origin").url == entry.url
61
- raise MultiRepoException, "'#{entry.path}' origin URL (#{entry.repo.remote('origin').url}) does not match entry (#{entry.url})!"
62
- end
63
- end
64
- end
1
+ require "multirepo/utility/console"
2
+ require "multirepo/utility/utils"
3
+ require "multirepo/git/repo"
4
+
5
+ module MultiRepo
6
+ class InstallCommand < Command
7
+ self.command = "install"
8
+ self.summary = "Clones and checks out dependencies as defined in the .multirepo file, and installs git-multirepo's local pre-commit hook."
9
+
10
+ def run
11
+ super
12
+ ensure_multirepo_initialized
13
+
14
+ Console.log_step("Cloning dependencies and installing hook...")
15
+
16
+ config_entries = ConfigFile.load
17
+
18
+ Console.log_info("There are #{config_entries.count} dependencies to install");
19
+
20
+ config_entries.each { |e| install(e) }
21
+
22
+ self.install_pre_commit_hook
23
+
24
+ Console.log_step("Done!")
25
+ rescue MultiRepoException => e
26
+ Console.log_error(e.message)
27
+ end
28
+
29
+ def install(entry)
30
+ if entry.repo.exists?
31
+ check_repo_validity(entry)
32
+ fetch_repo(entry)
33
+ else
34
+ clone_repo(entry)
35
+ end
36
+ checkout_branch(entry)
37
+ end
38
+
39
+ # Repo operations
40
+
41
+ def fetch_repo(entry)
42
+ Console.log_substep("Working copy '#{entry.repo.path}' already exists, fetching instead...")
43
+ raise MultiRepoException, "Could not fetch from remote #{entry.repo.remote('origin').url}" unless entry.repo.fetch
44
+ end
45
+
46
+ def clone_repo(entry)
47
+ Console.log_substep("Cloning '#{entry.url} to #{entry.repo.path}'")
48
+ raise MultiRepoException, "Could not clone remote #{entry.url}" unless entry.repo.clone(entry.url)
49
+ end
50
+
51
+ def checkout_branch(entry)
52
+ branch = entry.repo.branch(entry.branch);
53
+ raise MultiRepoException, "Could not checkout branch #{branch.name}" unless branch.checkout
54
+ Console.log_substep("Checked out branch #{branch.name} -> origin/#{branch.name}")
55
+ end
56
+
57
+ # Validation
58
+
59
+ def check_repo_validity(entry)
60
+ unless entry.repo.remote("origin").url == entry.url
61
+ raise MultiRepoException, "'#{entry.path}' origin URL (#{entry.repo.remote('origin').url}) does not match entry (#{entry.url})!"
62
+ end
63
+ end
64
+ end
65
65
  end
@@ -1,26 +1,26 @@
1
- require "os"
2
-
3
- require "multirepo/utility/console"
4
- require "multirepo/utility/utils"
5
-
6
- module MultiRepo
7
- class OpenCommand < Command
8
- self.command = "open"
9
- self.summary = "Opens all dependencies in the current OS's file explorer."
10
-
11
- def run
12
- super
13
- ensure_multirepo_initialized
14
-
15
- ConfigFile.load.each do |entry|
16
- if OS.osx?
17
- `open "#{entry.repo.path}"`
18
- elsif OS.windows?
19
- `explorer "#{Utils.convert_to_windows_path(entry.repo.path)}"`
20
- end
21
- end
22
- rescue MultiRepoException => e
23
- Console.log_error(e.message)
24
- end
25
- end
1
+ require "os"
2
+
3
+ require "multirepo/utility/console"
4
+ require "multirepo/utility/utils"
5
+
6
+ module MultiRepo
7
+ class OpenCommand < Command
8
+ self.command = "open"
9
+ self.summary = "Opens all dependencies in the current OS's file explorer."
10
+
11
+ def run
12
+ super
13
+ ensure_multirepo_initialized
14
+
15
+ ConfigFile.load.each do |entry|
16
+ if OS.osx?
17
+ `open "#{entry.repo.path}"`
18
+ elsif OS.windows?
19
+ `explorer "#{Utils.convert_to_windows_path(entry.repo.path)}"`
20
+ end
21
+ end
22
+ rescue MultiRepoException => e
23
+ Console.log_error(e.message)
24
+ end
25
+ end
26
26
  end
@@ -1,42 +1,42 @@
1
- require "multirepo/utility/console"
2
- require "multirepo/files/config-file"
3
-
4
- module MultiRepo
5
- class RemoveCommand < Command
6
- self.command = "remove"
7
- self.summary = "Removes the specified dependency from multirepo."
8
-
9
- def initialize(argv)
10
- @path = argv.shift_argument
11
- @delete = argv.flag?("delete")
12
- super
13
- end
14
-
15
- def validate!
16
- super
17
- help! "You must specify a dependency repository to remove" unless @path
18
- end
19
-
20
- def run
21
- super
22
- ensure_multirepo_initialized
23
-
24
- repo = Repo.new(@path)
25
- entry = ConfigEntry.new(repo)
26
-
27
- if ConfigFile.entry_exists?(entry)
28
- ConfigFile.remove_entry(entry)
29
- Console.log_step("Removed '#{@path}' from the .multirepo file")
30
-
31
- if @delete
32
- FileUtils.rm_rf(@path)
33
- Console.log_step("Deleted '#{@path}' from disk")
34
- end
35
- else
36
- raise MultiRepoException, "'#{@path}' isn't tracked by multirepo"
37
- end
38
- rescue MultiRepoException => e
39
- Console.log_error(e.message)
40
- end
41
- end
1
+ require "multirepo/utility/console"
2
+ require "multirepo/files/config-file"
3
+
4
+ module MultiRepo
5
+ class RemoveCommand < Command
6
+ self.command = "remove"
7
+ self.summary = "Removes the specified dependency from multirepo."
8
+
9
+ def initialize(argv)
10
+ @path = argv.shift_argument
11
+ @delete = argv.flag?("delete")
12
+ super
13
+ end
14
+
15
+ def validate!
16
+ super
17
+ help! "You must specify a dependency repository to remove" unless @path
18
+ end
19
+
20
+ def run
21
+ super
22
+ ensure_multirepo_initialized
23
+
24
+ repo = Repo.new(@path)
25
+ entry = ConfigEntry.new(repo)
26
+
27
+ if ConfigFile.entry_exists?(entry)
28
+ ConfigFile.remove_entry(entry)
29
+ Console.log_step("Removed '#{@path}' from the .multirepo file")
30
+
31
+ if @delete
32
+ FileUtils.rm_rf(@path)
33
+ Console.log_step("Deleted '#{@path}' from disk")
34
+ end
35
+ else
36
+ raise MultiRepoException, "'#{@path}' isn't tracked by multirepo"
37
+ end
38
+ rescue MultiRepoException => e
39
+ Console.log_error(e.message)
40
+ end
41
+ end
42
42
  end