mgit 0.4.2 → 0.4.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0bb3bdcd576ecd50f3d7d8a184f5bc58d8834562
4
- data.tar.gz: 22d8aac580b7b69cf884120b9005c9bff8e8135b
3
+ metadata.gz: 72dbe1352a6bd0ec28b0bcb8f058cd6827f4e2f1
4
+ data.tar.gz: 28d308609a2eccfe69bfab61574f251b31e562e4
5
5
  SHA512:
6
- metadata.gz: b6a82916b544e654920d4c63da49bff65ceaa88bbbf40330499a97d1b8e1fbca7cb8654ae67a365a42a03661801fa81be05ef1df5c0a48092df7b26b05352df2
7
- data.tar.gz: e9d9dbb58cd51a1cab081e07637c19c299ab714ecab5feab47faec7889366b397dcc2126b80267bd330b1d5b551b6c57f9e6116078364e4581e98a4645cd9128
6
+ metadata.gz: 4f2f0cc707a0f1e7a3cf1171348b06de20fc5f5bb3242f7a3cc2638b188ddb1bf7922290c955c3218c976093d67819f6f3902154deb30d26a8f548abc5380362
7
+ data.tar.gz: cc4893566bb6ffe38ad6169a6d25d786260f59b9c9336ce87331018c242ae466ff9639fa0bc30004d4dfc9f55198e360996914ce9004d9408e4a787932e3c4c5
data/lib/mgit/cli.rb CHANGED
@@ -8,9 +8,6 @@ module MGit
8
8
  # Initialize AppData and migrate if necessary.
9
9
  AppData.update
10
10
 
11
- # Initialize Commands.
12
- Command.load_commands
13
-
14
11
  # Run command, consuming its name from the list of arguments.
15
12
  command = Command.execute(ARGV.shift, ARGV)
16
13
  rescue UsageError => e
data/lib/mgit/command.rb CHANGED
@@ -63,3 +63,6 @@ module MGit
63
63
  end
64
64
  end
65
65
  end
66
+
67
+ # Initialize Commands.
68
+ MGit::Command.load_commands
@@ -6,9 +6,7 @@ module MGit
6
6
  raise CommandUsageError.new('First argument must be a path to a git repository.', self) unless is_git_dir?(path)
7
7
  raise CommandUsageError.new('Sorry, mgit can not handle bare repositories.', self) if is_bare?(path)
8
8
 
9
- # NOTE: The to_s to the HighLine::String is needed due to a bug in YAML/Psych in Ruby 2.0.0.
10
- # https://github.com/JEG2/highline/issues/69
11
- name = (args.size == 2) ? args[1] : (ask('Name of the repository? ') { |q| q.default = File.basename(path) }).to_s
9
+ name = (args.size == 2) ? args[1] : File.basename(path)
12
10
  raise CommandUsageError.new("Repository named #{name} already exists with different path.", self) unless is_new_or_same?(name, path)
13
11
 
14
12
  Registry.add(name, path)
@@ -36,11 +34,11 @@ module MGit
36
34
  end
37
35
 
38
36
  def is_git_dir?(path)
39
- Dir.chdir(path) { `git status 2>&1` !~ /fatal: Not a git repository/ }
37
+ System::git('status', :chdir => path) !~ /fatal: Not a git repository/
40
38
  end
41
39
 
42
40
  def is_bare?(path)
43
- Dir.chdir(path) { `git status 2>&1` =~ /fatal: This operation must be run in a work tree/}
41
+ System::git('status', :chdir => path) =~ /fatal: This operation must be run in a work tree/
44
42
  end
45
43
  end
46
44
  end
@@ -1,9 +1,8 @@
1
1
  module MGit
2
2
  class CloneCommand < Command
3
3
  def execute(args)
4
- log = `git clone #{args.join(' ')}`
5
- raise GitError.new('Clone command failed.') if $?.exitstatus != 0
6
-
4
+ log = System::git("clone #{args.join(' ')}", { :raise => true, :print_stderr => true }).stdout
5
+
7
6
  m = /Cloning into '(.*)'/.match(log.split("\n").first)
8
7
  Command.execute('add', [m[1]])
9
8
  end
@@ -1,16 +1,30 @@
1
1
  module MGit
2
2
  class ConfigCommand < Command
3
3
  def execute(args)
4
- key = args[0]
5
- value = args[1]
4
+ if args.size == 0
5
+ t = []
6
+ Configuration.each { |k, v| t << [k.to_s, v] }
7
+ ptable t
8
+ else
9
+ key = args[0]
6
10
 
7
- Configuration.set(key, value)
8
- rescue ConfigurationError => e
9
- raise CommandUsageError.new(e.to_s, self)
11
+ if args.size == 1
12
+ psystem Configuration.send(key.to_sym).to_s
13
+ else
14
+ key = args[0]
15
+ value = args[1]
16
+
17
+ begin
18
+ Configuration.set(key, value)
19
+ rescue ConfigurationError => e
20
+ raise CommandUsageError.new(e.to_s, self)
21
+ end
22
+ end
23
+ end
10
24
  end
11
25
 
12
26
  def arity
13
- [2, 2]
27
+ [0, 2]
14
28
  end
15
29
 
16
30
  def usage
@@ -4,11 +4,9 @@ module MGit
4
4
  class FetchCommand < Command
5
5
  def execute(args)
6
6
  thread_class = Configuration.threads ? Thread : NullThread
7
- threads = []
8
- Registry.each do |repo|
9
- threads << thread_class.new do
10
- fetch(repo)
11
- end
7
+
8
+ threads = Registry.collect do |repo|
9
+ thread_class.new { fetch(repo) }
12
10
  end
13
11
 
14
12
  threads.each { |t| t.join }
@@ -31,16 +29,15 @@ module MGit
31
29
  private
32
30
 
33
31
  def fetch(repo)
34
- remotes, st = Open3.capture2('git remote', :chdir => repo.path)
32
+ sc = System::git('remote', :chdir => repo.path)
35
33
 
36
- if st.exitstatus != 0
34
+ if !sc.success?
37
35
  perror "Failed to read remotes for repository #{repo.name}! Abort."
38
- Thread.exit
36
+ return
39
37
  end
40
38
 
41
- remotes.split.each do |remote|
42
- sout, st = Open3.capture2("git fetch #{remote}", :chdir => repo.path)
43
- if st.exitstatus == 0
39
+ sc.stdout.strip.split.each do |remote|
40
+ if System::git("fetch #{remote}", :chdir => repo.path).success?
44
41
  pinfo "Fetched #{remote} in repository #{repo.name}."
45
42
  else
46
43
  perror "Failed to fetch #{remote} in repository #{repo.name}! Abort."
@@ -2,26 +2,15 @@ module MGit
2
2
  class FFMergeCommand < Command
3
3
  def execute(args)
4
4
  Registry.chdir_each do |repo|
5
-
6
- bs = repo.remote_tracking_branches.select do |branch, upstream|
7
- !repo.unmerged_commits(branch, upstream).empty?
8
- end.map { |b, u| b }
9
-
10
- next if bs.empty?
5
+ branches = mergable_branches(repo)
6
+ next if branches.empty?
11
7
 
12
8
  if repo.dirty?
13
9
  pwarn "Skipping repository #{repo.name} since it's dirty."
14
10
  next
15
- end
16
-
17
- pinfo "Fast-forward merging branches in repository #{repo.name}..."
18
-
19
- cb = repo.current_branch
20
- bs.each do |b|
21
- `git checkout -q #{b}`
22
- `git merge --ff-only @{u}`
23
11
  end
24
- `git checkout -q #{cb}`
12
+
13
+ merge_branches(repo, branches)
25
14
  end
26
15
  end
27
16
 
@@ -38,5 +27,33 @@ module MGit
38
27
  end
39
28
 
40
29
  register_command :ffmerge
30
+
31
+ private
32
+
33
+ def mergable_branches(repo)
34
+ repo.remote_tracking_branches.select do |branch, upstream|
35
+ !repo.unmerged_commits(branch, upstream).empty?
36
+ end.map { |b, u| b }
37
+ end
38
+
39
+ def merge_branches(repo, branches)
40
+ pinfo "Fast-forward merging branches in repository #{repo.name}..."
41
+
42
+ cb = repo.current_branch
43
+
44
+ begin
45
+ branches.each { |b| merge_branch(b) }
46
+ rescue GitError
47
+ perror "Failed to merge a branch in repository #{repo.name}."
48
+ pwarn "Please visit this repository and check that everything's alright. Trying to set back to original working branch."
49
+ ensure
50
+ System::git("checkout -q #{cb}", :print_stderr => true)
51
+ end
52
+ end
53
+
54
+ def merge_branch(branch)
55
+ System::git("checkout -q #{branch}", { :raise => true, :print_stderr => true })
56
+ System::git("merge --ff-only @{u}", { :raise => true, :print_stderr => true })
57
+ end
41
58
  end
42
59
  end
@@ -3,9 +3,12 @@ module MGit
3
3
  def execute(args)
4
4
  command = args.join(' ')
5
5
 
6
- Registry.chdir_each do |repo|
6
+ Registry.each do |repo|
7
7
  pinfo "Executing command in repository #{repo.name}..."
8
- if !system(command) && !agree("Executing command '#{command}' in repository '#{repo.name}' failed. Would you like to continue anyway?".red)
8
+
9
+ sc = System::run(command, { :chdir => repo.path, :print_stdout => true, :print_stderr => true })
10
+
11
+ if !sc.success? && !agree("Executing command '#{command}' in repository '#{repo.name}' failed. Would you like to continue anyway?".red)
9
12
  break
10
13
  end
11
14
  end
@@ -3,10 +3,9 @@ module MGit
3
3
  def execute(args)
4
4
  ptrn = args[0]
5
5
 
6
- Registry.chdir_each do |repo|
6
+ Registry.each do |repo|
7
7
  pinfo "Looking for pattern '#{ptrn}' in repository #{repo.name}..."
8
- puts `git grep #{ptrn}`
9
- puts
8
+ System::git("grep #{ptrn}", { :chdir => repo.path, :print_stdout => true })
10
9
  end
11
10
  end
12
11
 
@@ -1,5 +1,5 @@
1
1
  module MGit
2
- class ListCommand < Command
2
+ class HeadCommand < Command
3
3
  def execute(args)
4
4
  t = []
5
5
  Registry.each { |repo| t << [repo.name, repo.current_branch, repo.current_head] }
@@ -3,10 +3,11 @@ module MGit
3
3
  def execute(args)
4
4
  if args.size == 0
5
5
  pinfo "M[eta]Git - manage multiple git repositories at the same time"
6
- puts
6
+ pinfo ''
7
7
  pinfo "Usage:"
8
8
  Command.instance_each do |cmd|
9
- pinfo "mgit #{cmd.usage}\n\t- #{cmd.description}"
9
+ pinfo "mgit #{cmd.usage}"
10
+ pinfo "\t- #{cmd.description}"
10
11
  end
11
12
  else
12
13
  pinfo Command.create(args[0]).help
@@ -40,13 +40,11 @@ module MGit
40
40
  end
41
41
 
42
42
  def has_commit?
43
- !(`git rev-parse --quiet --verify #{@commit}`.empty?)
43
+ !(System::git("rev-parse --quiet --verify #{@commit}").stdout.empty?)
44
44
  end
45
45
 
46
46
  def show_commit(repo)
47
- repo.chdir do
48
- system("git show #{@commit}")
49
- end
47
+ System::git("show #{@commit}", { :chdir => repo.path, :print_stdout => true } )
50
48
  end
51
49
 
52
50
  def show_menu
@@ -25,13 +25,12 @@ module MGit
25
25
  private
26
26
 
27
27
  def latest_tag(path)
28
- sout, serr, st = Open3.capture3('git describe --tags --abbrev=0 master', :chdir => path)
29
- (/fatal:/ =~ serr) ? 'none' : sout.strip
28
+ sc = System::git('describe --tags --abbrev=0 master', :chdir => path)
29
+ sc =~ /fatal:/ ? 'none' : sc.stdout.strip
30
30
  end
31
31
 
32
32
  def latest_tag_time(path, tag)
33
- sout, st = Open3.capture3("git log -n 1 --format='%at' #{tag}", :chdir => path)
34
- Time.at(sout.strip.to_i).strftime('%Y-%m-%d')
33
+ Time.at(System::git("log -n 1 --format='%at' #{tag}", :chdir => path).stdout.strip.to_i).strftime('%Y-%m-%d')
35
34
  end
36
35
 
37
36
  def print_latest_tag(repo)
@@ -1,5 +1,7 @@
1
1
  module MGit
2
2
  module Configuration
3
+ extend Enumerable
4
+
3
5
  KEYS = {
4
6
  :threads => {
5
7
  :default => true,
@@ -9,6 +11,11 @@ module MGit
9
11
  :plugindir => {
10
12
  :default => File.join(AppData::AppDataVersion.latest.send(:config_dir), 'plugins'),
11
13
  :description => 'directory from where plugin commands are loaded'
14
+ },
15
+
16
+ :colors => {
17
+ :default => true,
18
+ :description => 'set to false to disable all colored output'
12
19
  }
13
20
  }
14
21
 
@@ -28,19 +35,39 @@ module MGit
28
35
 
29
36
  def self.set(key, value)
30
37
  case key
31
- when 'threads'
32
- unless ['true', 'false', 'on', 'off'].include?(value)
33
- raise ConfigurationError.new("Illegal value for key threads.")
34
- end
35
-
36
- if ['true', 'on'].include?(value)
37
- self.threads = true
38
- else
39
- self.threads = false
38
+ when 'threads', 'colors'
39
+ set_boolean(key, value)
40
+ when 'plugindir'
41
+ if !File.directory?(value)
42
+ raise ConfigurationError.new("Illegal value for key plugindir. Has to be a directory.")
40
43
  end
44
+ self.plugindir = File.expand_path(value)
41
45
  else
42
46
  raise ConfigurationError.new("Unknown key: #{key}.")
43
47
  end
44
48
  end
49
+
50
+ def self.each
51
+ KEYS.each do |key|
52
+ yield [key.first.to_s, self.send(key.first).to_s]
53
+ end
54
+ end
55
+
56
+ def self.method_missing(meth, *args, &block)
57
+ raise ConfigurationError.new("Unknown key: #{key}")
58
+ end
59
+
60
+ private
61
+
62
+ def self.set_boolean(key, value)
63
+ unless ['true', 'false', 'on', 'off'].include?(value)
64
+ raise ConfigurationError.new("Illegal value for key #{key}.")
65
+ end
66
+ if ['true', 'on'].include?(value)
67
+ self.send("#{key}=", true)
68
+ else
69
+ self.send("#{key}=", false)
70
+ end
71
+ end
45
72
  end
46
73
  end
@@ -1,7 +1,20 @@
1
1
  module MGit
2
2
  class ImplementationError < StandardError; end
3
3
 
4
- class GitError < StandardError
4
+ class SystemCommandError < StandardError
5
+ attr_reader :cmd, :error
6
+
7
+ def initialize(cmd, error)
8
+ @cmd = cmd
9
+ @error = error
10
+ end
11
+
12
+ def to_s
13
+ "Error: #{@error}\nCommand was: #{@cmd}"
14
+ end
15
+ end
16
+
17
+ class GitError < SystemCommandError
5
18
  def initialize(error)
6
19
  @error = error
7
20
  end
data/lib/mgit/output.rb CHANGED
@@ -1,23 +1,35 @@
1
1
  module MGit
2
2
  module Output
3
+ def psystem(s)
4
+ print_to_screen s
5
+ end
6
+
3
7
  def pinfo(s)
4
- puts s.green
8
+ print_to_screen s.green
5
9
  end
6
10
 
7
11
  def pwarn(s)
8
- puts s.yellow
12
+ print_to_screen s.yellow
9
13
  end
10
14
 
11
15
  def perror(s)
12
- puts s.red
16
+ print_to_screen s.red
13
17
  end
14
18
 
15
19
  def ptable(table, options = {})
16
- puts TableOutputter.new(table, options).to_s
20
+ print_to_screen TableOutputter.new(table, options).to_s
17
21
  end
18
22
 
19
23
  private
20
24
 
25
+ def print_to_screen(s)
26
+ if Configuration.colors
27
+ puts s
28
+ else
29
+ puts s.uncolorize
30
+ end
31
+ end
32
+
21
33
  class TableOutputter
22
34
  attr_reader :table, :options
23
35
 
data/lib/mgit/registry.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  module MGit
2
2
  module Registry
3
+ extend Enumerable
4
+
3
5
  def self.all
4
6
  self.load.map { |name, path| Repository.new(name, path) }.sort_by(&:path)
5
7
  end
@@ -21,25 +21,26 @@ module MGit
21
21
  end
22
22
 
23
23
  def current_branch
24
- in_repo {
25
- b = `git rev-parse --abbrev-ref HEAD 2>&1`.strip
26
- $?.exitstatus == 0 ? b : 'HEAD'
24
+ in_repo {
25
+ sc = System::git('rev-parse --abbrev-ref HEAD')
26
+ sc.success? ? sc.stdout.strip : 'HEAD'
27
27
  }
28
28
  end
29
29
 
30
30
  def current_head
31
- in_repo { `git rev-parse --verify --short HEAD`.strip }
31
+ in_repo { System::git('rev-parse --verify --short HEAD').stdout.strip }
32
32
  end
33
33
 
34
34
  def remote_tracking_branches(upstream_exists_only = true)
35
35
  rb = remote_branches
36
36
 
37
37
  a = in_repo do
38
- `git for-each-ref --format='%(refname:short) %(upstream:short)' refs/heads`.
39
- split("\n").
40
- map { |b| b.split(' ') }.
41
- reject { |b| b.size != 2 }.
42
- select { |b| !upstream_exists_only || rb.include?(b[1]) }
38
+ System::git("for-each-ref --format='%(refname:short) %(upstream:short)' refs/heads")
39
+ .stdout
40
+ .split("\n")
41
+ .map { |b| b.split(' ') }
42
+ .reject { |b| b.size != 2 }
43
+ .select { |b| !upstream_exists_only || rb.include?(b[1]) }
43
44
  end
44
45
 
45
46
  Hash[a]
@@ -47,16 +48,17 @@ module MGit
47
48
 
48
49
  def remote_branches
49
50
  in_repo do
50
- `git branch -r`.split("\n").map { |a| a.split(' ')[0] }
51
+ System::git('branch -r').stdout.split("\n").map { |a| a.split(' ')[0] }
51
52
  end
52
53
  end
53
54
 
54
55
  def unmerged_commits(branch, upstream)
55
56
  in_repo do
56
- `git log --pretty=format:"%h#%an#%s" --reverse --relative-date #{branch}..#{upstream}`.
57
- split("\n").
58
- map { |line| line.split('#') }.
59
- map do |words|
57
+ System::git("log --pretty=format:'%h#%an#%s' --reverse --relative-date #{branch}..#{upstream}")
58
+ .stdout
59
+ .split("\n")
60
+ .map { |line| line.split('#') }
61
+ .map do |words|
60
62
  {
61
63
  :commit => words[0],
62
64
  :author => words[1],
@@ -116,7 +118,7 @@ module MGit
116
118
  private
117
119
 
118
120
  def status
119
- @status ||= in_repo { `git status --short --branch --ignore-submodules`.split("\n") }
121
+ @status ||= in_repo { System::git('status --short --branch --ignore-submodules').stdout.split("\n") }
120
122
  end
121
123
 
122
124
  def status_lines
@@ -0,0 +1,70 @@
1
+ require 'open3'
2
+
3
+ module MGit
4
+ module System
5
+ class SystemCommand
6
+ include Output
7
+
8
+ attr_reader :stdout, :stderr
9
+
10
+ def initialize(cmd, opts)
11
+ opts, popen_opts = extract_options(opts)
12
+ @stdout, @stderr, @st = Open3.capture3(cmd, popen_opts)
13
+
14
+ psystem(stdout.strip) if opts[:print_stdout]
15
+
16
+ if !success?
17
+ psystem(stderr.strip) if opts[:print_stderr]
18
+ raise SystemCommandError.new(cmd, opts[:error]) if opts[:raise]
19
+ end
20
+ end
21
+
22
+ def success?
23
+ @st.exitstatus == 0
24
+ end
25
+
26
+ def =~(re)
27
+ (@stdout =~ re) || (@stderr =~ re)
28
+ end
29
+
30
+ def default_options
31
+ {
32
+ :print_stdout => false,
33
+ :print_stderr => false,
34
+ :raise => false,
35
+ :error => 'Command failed.',
36
+ }
37
+ end
38
+
39
+ def extract_options(opts)
40
+ popen_opts = opts.dup
41
+
42
+ opts = Hash[
43
+ default_options.map do |k, v|
44
+ [k, popen_opts.has_key?(k) ? popen_opts.delete(k) : v]
45
+ end
46
+ ]
47
+
48
+ [opts, popen_opts]
49
+ end
50
+ end
51
+
52
+ class GitCommand < SystemCommand
53
+ def initialize(cmd, opts)
54
+ begin
55
+ super("git #{cmd}", opts)
56
+ rescue SystemCommandError => e
57
+ raise GitError.new(e.error)
58
+ end
59
+ end
60
+ end
61
+
62
+ def self.git(cmd, opts = {})
63
+ GitCommand.new(cmd, opts)
64
+ end
65
+
66
+ def self.run(cmd, opts = {})
67
+ SystemCommand.new(cmd, opts)
68
+ end
69
+ end
70
+ end
data/lib/mgit/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module MGit
2
- VERSION = '0.4.2'
2
+ VERSION = '0.4.3'
3
3
  end
data/lib/mgit.rb CHANGED
@@ -9,6 +9,7 @@ require 'mgit/exceptions'
9
9
  require 'mgit/output'
10
10
  require 'mgit/registry'
11
11
  require 'mgit/repository'
12
+ require 'mgit/system'
12
13
 
13
14
  require 'mgit/cli'
14
15
  require 'mgit/command'
metadata CHANGED
@@ -1,69 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mgit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - FlavourSys Technology GmbH
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-20 00:00:00.000000000 Z
11
+ date: 2014-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: highline
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: xdg
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  description: M[eta]Git let's you manage multiple git repositories simultaneously
@@ -73,34 +73,35 @@ executables:
73
73
  extensions: []
74
74
  extra_rdoc_files: []
75
75
  files:
76
+ - bin/mgit
76
77
  - lib/mgit.rb
77
- - lib/mgit/output.rb
78
- - lib/mgit/repository.rb
79
- - lib/mgit/version.rb
80
78
  - lib/mgit/appdata.rb
81
- - lib/mgit/registry.rb
82
- - lib/mgit/configuration.rb
83
- - lib/mgit/exceptions.rb
84
- - lib/mgit/commands/list.rb
85
- - lib/mgit/commands/grep.rb
79
+ - lib/mgit/cli.rb
80
+ - lib/mgit/command.rb
81
+ - lib/mgit/commands/add.rb
82
+ - lib/mgit/commands/clone.rb
86
83
  - lib/mgit/commands/config.rb
87
- - lib/mgit/commands/remove_all.rb
88
- - lib/mgit/commands/version.rb
89
84
  - lib/mgit/commands/fetch.rb
85
+ - lib/mgit/commands/ffmerge.rb
86
+ - lib/mgit/commands/foreach.rb
87
+ - lib/mgit/commands/grep.rb
90
88
  - lib/mgit/commands/head.rb
91
- - lib/mgit/commands/status.rb
92
- - lib/mgit/commands/remove.rb
93
89
  - lib/mgit/commands/help.rb
94
- - lib/mgit/commands/foreach.rb
95
- - lib/mgit/commands/tags.rb
96
- - lib/mgit/commands/add.rb
90
+ - lib/mgit/commands/list.rb
97
91
  - lib/mgit/commands/log.rb
92
+ - lib/mgit/commands/remove.rb
93
+ - lib/mgit/commands/remove_all.rb
98
94
  - lib/mgit/commands/show.rb
99
- - lib/mgit/commands/ffmerge.rb
100
- - lib/mgit/commands/clone.rb
101
- - lib/mgit/command.rb
102
- - lib/mgit/cli.rb
103
- - bin/mgit
95
+ - lib/mgit/commands/status.rb
96
+ - lib/mgit/commands/tags.rb
97
+ - lib/mgit/commands/version.rb
98
+ - lib/mgit/configuration.rb
99
+ - lib/mgit/exceptions.rb
100
+ - lib/mgit/output.rb
101
+ - lib/mgit/registry.rb
102
+ - lib/mgit/repository.rb
103
+ - lib/mgit/system.rb
104
+ - lib/mgit/version.rb
104
105
  homepage: http://github.com/flavoursys/mgit
105
106
  licenses:
106
107
  - MIT
@@ -111,17 +112,17 @@ require_paths:
111
112
  - lib
112
113
  required_ruby_version: !ruby/object:Gem::Requirement
113
114
  requirements:
114
- - - '>='
115
+ - - ">="
115
116
  - !ruby/object:Gem::Version
116
117
  version: '0'
117
118
  required_rubygems_version: !ruby/object:Gem::Requirement
118
119
  requirements:
119
- - - '>='
120
+ - - ">="
120
121
  - !ruby/object:Gem::Version
121
122
  version: '0'
122
123
  requirements: []
123
124
  rubyforge_project:
124
- rubygems_version: 2.0.14
125
+ rubygems_version: 2.2.2
125
126
  signing_key:
126
127
  specification_version: 4
127
128
  summary: MGit meta repository tool