mgit 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
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