gitan 0.0.1 → 0.0.2
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.
- data/CHANGES +16 -3
- data/README.rdoc +18 -1
- data/VERSION +1 -1
- data/bin/gitan +165 -0
- data/gitan.gemspec +4 -4
- data/lib/gitan/repo.rb +41 -12
- data/lib/gitan.rb +14 -0
- data/test/gitan/test_repo.rb +100 -41
- data/test/test_gitan.rb +6 -4
- metadata +5 -5
- data/bin/gitanstatus +0 -26
data/CHANGES
CHANGED
@@ -1,8 +1,21 @@
|
|
1
1
|
= Gitan changelog
|
2
2
|
|
3
|
+
== Master for 0.0.3
|
4
|
+
|
5
|
+
== Version 0.0.2
|
6
|
+
* Bugfix of to_be_pushed; to be false just after git pull.
|
7
|
+
* add bin/gitan
|
8
|
+
* add gitan subcommand, gitan status, alternatively to bin/gitanstatus
|
9
|
+
* add gitan subcommand, gitan heads
|
10
|
+
* add gitan subcommand, gitan commit
|
11
|
+
* add gitan subcommand, gitan push
|
12
|
+
* add gitan subcommand, gitan pull
|
13
|
+
* add --remote option to 'gitan status'
|
14
|
+
* add --all and --explain options to gitan status
|
15
|
+
|
3
16
|
== Version 0.0.1
|
4
|
-
*
|
17
|
+
* small bugfix for executable bin/gitanstatus
|
5
18
|
|
6
19
|
== Version 0.0.0
|
7
|
-
*
|
8
|
-
*
|
20
|
+
* add Gitan::Repo
|
21
|
+
* add bin/gitanstatus
|
data/README.rdoc
CHANGED
@@ -1,6 +1,23 @@
|
|
1
1
|
= gitan
|
2
2
|
|
3
|
-
|
3
|
+
This gem provides some commands to manage multiple git repositories.
|
4
|
+
'gitan status' shows status of every git repository.
|
5
|
+
- multiple branch?
|
6
|
+
- changes to be staged?
|
7
|
+
- changes to be commited?
|
8
|
+
- changes to be pushed?
|
9
|
+
- updates on remote repository? (when --remote option is used)
|
10
|
+
|
11
|
+
'gitan commit' commits on all git repositories that has changes to be commited.
|
12
|
+
'gitan push' pushes on all git repositories that has changes to be pushed.
|
13
|
+
'gitan pull' pulles on all git repositories that has updates on remote repository.
|
14
|
+
The repositories that have no changes are ignored.
|
15
|
+
|
16
|
+
== Installation
|
17
|
+
If you want to use --remote options, install gitan at remote host and enable to execute 'gitan heads'.
|
18
|
+
|
19
|
+
== Usage
|
20
|
+
Execute 'gitan --help'.
|
4
21
|
|
5
22
|
== Contributing to gitan
|
6
23
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/bin/gitan
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
#gitan heads
|
5
|
+
# Show hash value of every git repository.
|
6
|
+
#
|
7
|
+
#gitan status
|
8
|
+
# Show status of every git working trees.
|
9
|
+
# Confirm the command 'git rev-parse FETCH_HEAD' show a hash value.
|
10
|
+
# If not, you should execute 'git pull'
|
11
|
+
#
|
12
|
+
#gitan commit
|
13
|
+
# Commit every working tree that has changes to be be commited.
|
14
|
+
#
|
15
|
+
#gitan push
|
16
|
+
# Commit every working tree that has changes to be pushed.
|
17
|
+
#
|
18
|
+
#gitan pull
|
19
|
+
# Pull every working tree that has update on remote.
|
20
|
+
|
21
|
+
require "optparse"
|
22
|
+
require "yaml"
|
23
|
+
require "pp"
|
24
|
+
require "gitan"
|
25
|
+
|
26
|
+
def show_usage
|
27
|
+
puts <<-HERE
|
28
|
+
USAGE
|
29
|
+
gitan heads [path]"
|
30
|
+
gitan status [path] [-r remote_dir]"
|
31
|
+
gitan commit [path] [-a arguments]"
|
32
|
+
gitan push [path] [-a arguments]"
|
33
|
+
gitan pull [path] [-a arguments] [-r remote_dir]"
|
34
|
+
|
35
|
+
Default value of 'path' is ~/git.
|
36
|
+
|
37
|
+
Examples:
|
38
|
+
gitan heads /home/git
|
39
|
+
gitan status -r example.com:/home/git
|
40
|
+
gitan commit --argument='-am "commit message"'
|
41
|
+
gitan push -a "origin master"
|
42
|
+
gitan pull ~/git -r example.com:/home/git -a "origin master"
|
43
|
+
HERE
|
44
|
+
end
|
45
|
+
|
46
|
+
def add_remote_option
|
47
|
+
OPTION_PARSER.on("-r remote_dir", "--remote=dir", "with remote info"){ |remote_dir|
|
48
|
+
server, path = remote_dir.split(":")
|
49
|
+
OPTIONS[:remote] = Gitan.remote_heads(server, path)
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
def add_argument_option
|
54
|
+
OPTION_PARSER.on("-a str", "--arguments=str", "supply argument to command"){ |str|
|
55
|
+
OPTIONS[:argument] = str
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
def repositories(remote_heads = {})
|
60
|
+
git_dir = ENV["HOME"] + "/git"
|
61
|
+
git_dir = File::expand_path(ARGV[0]) if ARGV[0]
|
62
|
+
|
63
|
+
|
64
|
+
dirs = Dir.glob(git_dir + "/*").sort.map do |path|
|
65
|
+
if File.directory? path
|
66
|
+
remote_head = nil
|
67
|
+
remote_head = OPTIONS[:remote][File.basename(path)] if OPTIONS[:remote]
|
68
|
+
Gitan::Repo.new(path, remote_head)
|
69
|
+
else
|
70
|
+
nil
|
71
|
+
end
|
72
|
+
end
|
73
|
+
dirs.select{|dir| dir}
|
74
|
+
end
|
75
|
+
|
76
|
+
def execute(path, command)
|
77
|
+
print "#{path}: "
|
78
|
+
Dir.chdir path
|
79
|
+
puts command
|
80
|
+
system command unless OPTIONS[:debug]
|
81
|
+
end
|
82
|
+
|
83
|
+
def status
|
84
|
+
add_remote_option
|
85
|
+
OPTION_PARSER.on("-a", "--all", "show all repositories."){ OPTIONS[:all] = true}
|
86
|
+
OPTION_PARSER.on("-e", "--explain", "show explanation for abbreviation."){ OPTIONS[:explain] = true}
|
87
|
+
OPTION_PARSER.parse!(ARGV)
|
88
|
+
|
89
|
+
repos = repositories
|
90
|
+
unless OPTIONS[:all]
|
91
|
+
repos = repos.select do |repo|
|
92
|
+
result = false
|
93
|
+
result = true if repo.multiple_branch?
|
94
|
+
result = true if repo.to_be_staged?
|
95
|
+
result = true if repo.to_be_commited?
|
96
|
+
result = true if repo.to_be_pushed?
|
97
|
+
result = true if (OPTIONS[:remote] && repo.to_be_pulled?)
|
98
|
+
result
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
Gitan::Repo.show_abbreviation if OPTIONS[:explain]
|
103
|
+
repos.each do |repo|
|
104
|
+
puts repo.short_status
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def heads
|
109
|
+
results = {}
|
110
|
+
repositories.each do |repo|
|
111
|
+
results[repo.path] = repo.head
|
112
|
+
end
|
113
|
+
YAML.dump(results, $stdout)
|
114
|
+
end
|
115
|
+
|
116
|
+
def commit
|
117
|
+
add_argument_option
|
118
|
+
OPTION_PARSER.parse!(ARGV)
|
119
|
+
repositories.select {|repo| repo.to_be_commited?}.each do |repo|
|
120
|
+
execute(repo.path, "git commit #{OPTIONS[:argument]}")
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def push
|
125
|
+
add_argument_option
|
126
|
+
OPTION_PARSER.parse!(ARGV)
|
127
|
+
|
128
|
+
repositories.select {|repo| repo.to_be_pushed?}.each do |repo|
|
129
|
+
execute(repo.path, "git push #{OPTIONS[:argument]}")
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def pull
|
134
|
+
add_remote_option
|
135
|
+
add_argument_option
|
136
|
+
OPTION_PARSER.parse!(ARGV)
|
137
|
+
|
138
|
+
repositories.select {|repo| repo.to_be_pulled?}.each do |repo|
|
139
|
+
execute(repo.path, "git pull #{OPTIONS[:argument]}")
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
##main
|
144
|
+
OPTIONS = {}
|
145
|
+
OPTION_PARSER = OptionParser.new
|
146
|
+
OPTION_PARSER.on("-d", "--debug", "debug mode."){OPTIONS[:debug] = true}
|
147
|
+
command = ARGV.shift
|
148
|
+
|
149
|
+
case command
|
150
|
+
when "status"
|
151
|
+
status
|
152
|
+
when "heads"
|
153
|
+
heads
|
154
|
+
when "commit"
|
155
|
+
commit
|
156
|
+
when "push"
|
157
|
+
push
|
158
|
+
when "pull"
|
159
|
+
pull
|
160
|
+
when "--help"
|
161
|
+
show_usage
|
162
|
+
else
|
163
|
+
puts "Unknown command: #{command}"
|
164
|
+
show_usage
|
165
|
+
end
|
data/gitan.gemspec
CHANGED
@@ -5,14 +5,14 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "gitan"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["ippei94da"]
|
12
|
-
s.date = "2013-09-
|
12
|
+
s.date = "2013-09-09"
|
13
13
|
s.description = "This gem provides some commands to manage multiple git repositories."
|
14
14
|
s.email = "ippei94da@gmail.com"
|
15
|
-
s.executables = ["
|
15
|
+
s.executables = ["gitan"]
|
16
16
|
s.extra_rdoc_files = [
|
17
17
|
"LICENSE.txt",
|
18
18
|
"README.rdoc"
|
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
"README.rdoc",
|
26
26
|
"Rakefile",
|
27
27
|
"VERSION",
|
28
|
-
"bin/
|
28
|
+
"bin/gitan",
|
29
29
|
"gitan.gemspec",
|
30
30
|
"lib/gitan.rb",
|
31
31
|
"lib/gitan/repo.rb",
|
data/lib/gitan/repo.rb
CHANGED
@@ -1,12 +1,21 @@
|
|
1
1
|
#
|
2
2
|
class Gitan::Repo
|
3
|
+
attr_reader :path
|
3
4
|
|
4
5
|
def self.show_abbreviation(io = $stdout)
|
5
|
-
io.puts "==== B: multiple branches, S: to be staged, C: to be commited, P: to be pushed."
|
6
|
+
#io.puts "==== B: multiple branches, S: to be staged, C: to be commited, P: to be pushed, L: to be pulled."
|
7
|
+
io.puts "Abbreviations:"
|
8
|
+
io.puts " L: to be pulled."
|
9
|
+
io.puts " B: multiple branches"
|
10
|
+
io.puts " S: to be staged"
|
11
|
+
io.puts " C: to be commited"
|
12
|
+
io.puts " P: to be pushed"
|
13
|
+
io.puts "========================================"
|
6
14
|
end
|
7
15
|
|
8
|
-
def initialize(path)
|
16
|
+
def initialize(path, remote_head = false)
|
9
17
|
@path = path
|
18
|
+
@remote_head = remote_head
|
10
19
|
end
|
11
20
|
|
12
21
|
#Return short status as String. E.g,
|
@@ -17,6 +26,9 @@ class Gitan::Repo
|
|
17
26
|
# C: to be commited
|
18
27
|
# P: to be pushed
|
19
28
|
def short_status
|
29
|
+
l = " "
|
30
|
+
l = "L" if @remote_head && to_be_pulled?
|
31
|
+
|
20
32
|
b = " "
|
21
33
|
b = "B" if multiple_branch?
|
22
34
|
|
@@ -29,7 +41,7 @@ class Gitan::Repo
|
|
29
41
|
p = " "
|
30
42
|
p = "P" if to_be_pushed?
|
31
43
|
|
32
|
-
return (b + s + c + p
|
44
|
+
return (l + b + s + c + p + " " + File.basename(@path))
|
33
45
|
end
|
34
46
|
|
35
47
|
def multiple_branch?
|
@@ -39,28 +51,45 @@ class Gitan::Repo
|
|
39
51
|
|
40
52
|
#Return true if working tree has untracked changes.
|
41
53
|
def to_be_staged?
|
42
|
-
lines = command_output_lines("git status
|
43
|
-
|
54
|
+
lines = command_output_lines("git status --porcelain")
|
55
|
+
result = false
|
56
|
+
lines.each do |line|
|
57
|
+
result = true if line =~ /^\?\? /
|
58
|
+
result = true if line =~ /^ . /
|
59
|
+
end
|
60
|
+
return result
|
44
61
|
end
|
45
62
|
|
46
63
|
#Return true if working tree has changes on stage index.
|
47
64
|
def to_be_commited?
|
48
|
-
lines = command_output_lines("git status
|
65
|
+
lines = command_output_lines("git status --porcelain")
|
49
66
|
return lines.select {|line| line =~ /^[^\?]/} != []
|
50
67
|
end
|
51
68
|
|
52
69
|
#Return true if working tree has change which is commited but not pushed.
|
53
70
|
def to_be_pushed?
|
54
|
-
|
71
|
+
result = true
|
72
|
+
|
55
73
|
remote_lines = command_output_lines("git rev-parse --remotes")
|
56
|
-
|
74
|
+
result = false if remote_lines.include?(head)
|
75
|
+
|
76
|
+
fetch_head = command_output_lines("git rev-parse FETCH_HEAD")[0]
|
77
|
+
result = false if head == fetch_head
|
78
|
+
|
79
|
+
return result
|
57
80
|
end
|
58
81
|
|
59
|
-
|
82
|
+
def head
|
83
|
+
command_output_lines("git rev-parse HEAD")[0]
|
84
|
+
end
|
85
|
+
|
86
|
+
#Return true if the working tree has un-pulled changes on remote.
|
87
|
+
def to_be_pulled?
|
88
|
+
lines = command_output_lines('git log --pretty=format:"%H"')
|
89
|
+
return ! lines.include?(@remote_head)
|
90
|
+
end
|
60
91
|
|
61
|
-
|
62
|
-
# `git status -s`.split("\n")
|
63
|
-
#end
|
92
|
+
private
|
64
93
|
|
65
94
|
def command_output_lines(str)
|
66
95
|
Dir.chdir @path
|
data/lib/gitan.rb
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
module Gitan; end
|
2
2
|
|
3
3
|
require "pp"
|
4
|
+
require "yaml"
|
4
5
|
#require "grit"
|
5
6
|
require "gitan/repo.rb"
|
7
|
+
|
8
|
+
module Gitan
|
9
|
+
|
10
|
+
#Return heads in remote host.
|
11
|
+
def self.remote_heads(server, path)
|
12
|
+
results = {}
|
13
|
+
YAML.load(`ssh #{server} gitan heads #{path}`).each do |repo_path, head|
|
14
|
+
repo_name = File.basename(repo_path).sub(/\.git$/, "")
|
15
|
+
results[repo_name] = head
|
16
|
+
end
|
17
|
+
return results
|
18
|
+
end
|
19
|
+
end
|
data/test/gitan/test_repo.rb
CHANGED
@@ -2,14 +2,7 @@ gem "test-unit"
|
|
2
2
|
require "test/unit"
|
3
3
|
require "gitan"
|
4
4
|
|
5
|
-
|
6
|
-
#class GritRepoDummy
|
7
|
-
# attr_accessor :status
|
8
|
-
# def initialize(status)
|
9
|
-
# @status = status
|
10
|
-
# end
|
11
|
-
#end
|
12
|
-
#
|
5
|
+
#class GritRepoDummy # attr_accessor :status # def initialize(status) # @status = status # end #end #
|
13
6
|
#class GritRepoStatusDummy
|
14
7
|
# attr_accessor :changed
|
15
8
|
# attr_accessor :added
|
@@ -44,85 +37,137 @@ class TestRepo < Test::Unit::TestCase
|
|
44
37
|
def setup
|
45
38
|
outputs = {
|
46
39
|
"git branch" => ["* master"],
|
47
|
-
"git status
|
48
|
-
"git rev-parse HEAD" => ["
|
40
|
+
"git status --porcelain" => [],
|
41
|
+
"git rev-parse HEAD" => ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
42
|
+
"git rev-parse FETCH_HEAD" => ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
49
43
|
"git rev-parse --remotes" => [
|
50
|
-
"
|
51
|
-
"
|
44
|
+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
45
|
+
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
52
46
|
],
|
53
47
|
}
|
54
|
-
@r00 = Gitan::Repo.new("r00")
|
48
|
+
@r00 = Gitan::Repo.new("/home/git/r00")
|
55
49
|
@r00.set_outputs(outputs)
|
56
50
|
|
57
51
|
outputs = {
|
58
52
|
"git branch" => ["* master", " tmp"],
|
59
|
-
"git status
|
53
|
+
"git status --porcelain" => [
|
60
54
|
" M Gemfile",
|
61
55
|
"AM bin/gitanstatus",
|
62
56
|
"?? test/gitan/",
|
63
57
|
],
|
64
|
-
"git rev-parse HEAD" => ["
|
58
|
+
"git rev-parse HEAD" => ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
59
|
+
"git rev-parse FETCH_HEAD" => ["dddddddddddddddddddddddddddddddddddddddd"],
|
65
60
|
"git rev-parse --remotes" => [
|
66
|
-
"
|
67
|
-
"
|
61
|
+
"cccccccccccccccccccccccccccccccccccccccc",
|
62
|
+
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
68
63
|
],
|
69
64
|
}
|
70
|
-
@r01 = Gitan::Repo.new("r01")
|
65
|
+
@r01 = Gitan::Repo.new("/home/git/r01")
|
71
66
|
@r01.set_outputs(outputs)
|
72
67
|
|
73
68
|
outputs = {
|
74
69
|
"git branch" => ["* master", " tmp"],
|
75
|
-
"git status
|
70
|
+
"git status --porcelain" => [
|
76
71
|
"?? test/gitan/",
|
77
72
|
],
|
78
|
-
"git rev-parse HEAD" => ["
|
73
|
+
"git rev-parse HEAD" => ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
74
|
+
"git rev-parse FETCH_HEAD" => ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
79
75
|
"git rev-parse --remotes" => [
|
80
|
-
"
|
81
|
-
"
|
76
|
+
"cccccccccccccccccccccccccccccccccccccccc",
|
77
|
+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
82
78
|
],
|
83
79
|
}
|
84
|
-
@r02 = Gitan::Repo.new("r02")
|
80
|
+
@r02 = Gitan::Repo.new("/home/git/r02")
|
85
81
|
@r02.set_outputs(outputs)
|
86
82
|
|
87
83
|
outputs = {
|
88
84
|
"git branch" => ["* master"],
|
89
|
-
"git status
|
90
|
-
"git rev-parse HEAD" => ["
|
85
|
+
"git status --porcelain" => [],
|
86
|
+
"git rev-parse HEAD" => ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
87
|
+
"git rev-parse FETCH_HEAD" => ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
91
88
|
"git rev-parse --remotes" => [
|
92
|
-
"
|
89
|
+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
93
90
|
],
|
94
91
|
}
|
95
|
-
@r03 = Gitan::Repo.new("r00")
|
92
|
+
@r03 = Gitan::Repo.new("/home/git/r00")
|
96
93
|
@r03.set_outputs(outputs)
|
97
94
|
|
95
|
+
outputs = {
|
96
|
+
"git branch" => ["* master"],
|
97
|
+
"git status --porcelain" => [],
|
98
|
+
"git rev-parse HEAD" => ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
99
|
+
"git rev-parse FETCH_HEAD" => ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
100
|
+
"git rev-parse --remotes" => [
|
101
|
+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
102
|
+
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
103
|
+
],
|
104
|
+
'git log --pretty=format:"%H"' => [
|
105
|
+
'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
|
106
|
+
'ffffffffffffffffffffffffffffffffffffffff',
|
107
|
+
'0000000000000000000000000000000000000000',
|
108
|
+
]
|
109
|
+
}
|
110
|
+
@r04 = Gitan::Repo.new("/home/git/r04","aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
|
111
|
+
@r04.set_outputs(outputs)
|
112
|
+
|
113
|
+
@r05 = Gitan::Repo.new("/home/git/r05","eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee")
|
114
|
+
@r05.set_outputs(outputs)
|
115
|
+
|
116
|
+
outputs = {
|
117
|
+
"git branch" => ["* master", " tmp"],
|
118
|
+
"git status --porcelain" => [
|
119
|
+
" M Gemfile",
|
120
|
+
"AM bin/gitanstatus",
|
121
|
+
"?? test/gitan/",
|
122
|
+
],
|
123
|
+
"git rev-parse HEAD" => ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
124
|
+
"git rev-parse FETCH_HEAD" => ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"],
|
125
|
+
"git rev-parse --remotes" => [
|
126
|
+
"cccccccccccccccccccccccccccccccccccccccc",
|
127
|
+
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
128
|
+
],
|
129
|
+
}
|
130
|
+
@r06 = Gitan::Repo.new("/home/git/r01")
|
131
|
+
@r06.set_outputs(outputs)
|
132
|
+
|
98
133
|
end
|
99
134
|
|
100
135
|
def test_to_be_staged?
|
101
136
|
assert_equal(false, @r00.to_be_staged?)
|
102
137
|
assert_equal(true , @r01.to_be_staged?)
|
103
138
|
|
104
|
-
@r00.outputs["git status
|
105
|
-
"?? test/gitan/",
|
106
|
-
]
|
139
|
+
@r00.outputs["git status --porcelain"] = [ "?? test/gitan/", ]
|
107
140
|
assert_equal(true , @r00.to_be_staged?)
|
108
141
|
|
109
|
-
@r00.outputs["git status
|
142
|
+
@r00.outputs["git status --porcelain"] = [ " M Gemfile", ]
|
143
|
+
assert_equal(true , @r00.to_be_staged?)
|
144
|
+
|
145
|
+
@r00.outputs["git status --porcelain"] = [ "M Gemfile", ]
|
146
|
+
assert_equal(false, @r00.to_be_staged?)
|
147
|
+
|
148
|
+
@r00.outputs["git status --porcelain"] = [
|
110
149
|
" M Gemfile",
|
111
150
|
"AM bin/gitanstatus",
|
112
151
|
]
|
113
|
-
assert_equal(
|
152
|
+
assert_equal(true , @r00.to_be_staged?)
|
153
|
+
|
154
|
+
@r00.outputs["git status --porcelain"] = [
|
155
|
+
"?? Gemfile",
|
156
|
+
"A bin/gitanstatus",
|
157
|
+
]
|
158
|
+
assert_equal(true , @r00.to_be_staged?)
|
114
159
|
end
|
115
160
|
|
116
161
|
def test_to_be_commited?
|
117
162
|
assert_equal(false, @r00.to_be_commited?)
|
118
163
|
assert_equal(true , @r01.to_be_commited?)
|
119
164
|
|
120
|
-
@r00.outputs["git status
|
165
|
+
@r00.outputs["git status --porcelain"] = [
|
121
166
|
"?? test/gitan/",
|
122
167
|
]
|
123
168
|
assert_equal(false, @r00.to_be_commited?)
|
124
169
|
|
125
|
-
@r00.outputs["git status
|
170
|
+
@r00.outputs["git status --porcelain"] = [
|
126
171
|
" M Gemfile",
|
127
172
|
"AM bin/gitanstatus",
|
128
173
|
]
|
@@ -132,16 +177,16 @@ class TestRepo < Test::Unit::TestCase
|
|
132
177
|
def test_command_output_lines
|
133
178
|
assert_equal(
|
134
179
|
[
|
135
|
-
"
|
136
|
-
"
|
180
|
+
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
181
|
+
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
137
182
|
],
|
138
183
|
@r00.command_output_lines("git rev-parse --remotes")
|
139
184
|
)
|
140
185
|
|
141
186
|
assert_equal(
|
142
187
|
[
|
143
|
-
"
|
144
|
-
"
|
188
|
+
"cccccccccccccccccccccccccccccccccccccccc",
|
189
|
+
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
145
190
|
],
|
146
191
|
@r01.command_output_lines("git rev-parse --remotes")
|
147
192
|
)
|
@@ -151,6 +196,7 @@ class TestRepo < Test::Unit::TestCase
|
|
151
196
|
assert_equal(false, @r00.to_be_pushed?)
|
152
197
|
assert_equal(true , @r01.to_be_pushed?)
|
153
198
|
assert_equal(false , @r03.to_be_pushed?)
|
199
|
+
assert_equal(false , @r06.to_be_pushed?)
|
154
200
|
end
|
155
201
|
|
156
202
|
def test_multiple_branch?
|
@@ -160,9 +206,22 @@ class TestRepo < Test::Unit::TestCase
|
|
160
206
|
end
|
161
207
|
|
162
208
|
def test_short_status
|
163
|
-
assert_equal("
|
164
|
-
assert_equal("BSCP r01", @r01.short_status)
|
165
|
-
assert_equal("BS r02", @r02.short_status)
|
209
|
+
assert_equal(" r00", @r00.short_status)
|
210
|
+
assert_equal(" BSCP r01", @r01.short_status)
|
211
|
+
assert_equal(" BS r02", @r02.short_status)
|
212
|
+
assert_equal("L r04", @r04.short_status)
|
213
|
+
assert_equal(" r05", @r05.short_status)
|
166
214
|
end
|
167
215
|
|
216
|
+
def test_head
|
217
|
+
assert_equal("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
218
|
+
@r00.head)
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_to_be_pulled?
|
222
|
+
assert_equal(true , @r04.to_be_pulled?)
|
223
|
+
assert_equal(false, @r05.to_be_pulled?)
|
224
|
+
end
|
225
|
+
|
226
|
+
|
168
227
|
end
|
data/test/test_gitan.rb
CHANGED
@@ -9,10 +9,12 @@ require 'helper'
|
|
9
9
|
#
|
10
10
|
gem "test-unit"
|
11
11
|
require "test/unit"
|
12
|
+
require "gitan"
|
13
|
+
require "pp"
|
12
14
|
|
13
|
-
class
|
14
|
-
def
|
15
|
-
|
16
|
-
#
|
15
|
+
class TestGitan < Test::Unit::TestCase
|
16
|
+
def test_remote_heads
|
17
|
+
##How should be tested?
|
18
|
+
#pp Gitan.remote_heads("localhost", "/home/git")
|
17
19
|
end
|
18
20
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdoc
|
@@ -94,7 +94,7 @@ dependencies:
|
|
94
94
|
description: This gem provides some commands to manage multiple git repositories.
|
95
95
|
email: ippei94da@gmail.com
|
96
96
|
executables:
|
97
|
-
-
|
97
|
+
- gitan
|
98
98
|
extensions: []
|
99
99
|
extra_rdoc_files:
|
100
100
|
- LICENSE.txt
|
@@ -107,7 +107,7 @@ files:
|
|
107
107
|
- README.rdoc
|
108
108
|
- Rakefile
|
109
109
|
- VERSION
|
110
|
-
- bin/
|
110
|
+
- bin/gitan
|
111
111
|
- gitan.gemspec
|
112
112
|
- lib/gitan.rb
|
113
113
|
- lib/gitan/repo.rb
|
@@ -129,7 +129,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
129
129
|
version: '0'
|
130
130
|
segments:
|
131
131
|
- 0
|
132
|
-
hash:
|
132
|
+
hash: -792430867
|
133
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
134
134
|
none: false
|
135
135
|
requirements:
|
data/bin/gitanstatus
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
#! /usr/bin/env ruby
|
2
|
-
|
3
|
-
require "gitan"
|
4
|
-
|
5
|
-
if ARGV.empty?
|
6
|
-
git_dir = ENV["HOME"] + "/git"
|
7
|
-
else
|
8
|
-
git_dir = File::expand_path(ARGV[0])
|
9
|
-
end
|
10
|
-
|
11
|
-
|
12
|
-
Gitan::Repo.show_abbreviation($stdout)
|
13
|
-
|
14
|
-
repos = {}
|
15
|
-
Dir.glob(git_dir + "/*").sort.map do |path|
|
16
|
-
next unless File.directory? path
|
17
|
-
repo = Gitan::Repo.new(path)
|
18
|
-
puts repo.short_status
|
19
|
-
#pp dirname
|
20
|
-
#begin
|
21
|
-
# repos[File.basename file] = Gitan::Repo.new( Grit::Repo.new(file))
|
22
|
-
#rescue Grit::InvalidGitRepositoryError
|
23
|
-
# next
|
24
|
-
#end
|
25
|
-
|
26
|
-
end
|