git_helpers 0.1.0
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 +7 -0
- data/.gitignore +6 -0
- data/.travis.yml +10 -0
- data/.yardopts +6 -0
- data/ChangeLog.md +4 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +20 -0
- data/README.md +55 -0
- data/Rakefile +29 -0
- data/bin/diff-fancy.rb +699 -0
- data/bin/gitstatus.rb +349 -0
- data/fixtures/git-diff.diff +254 -0
- data/gemspec.yml +18 -0
- data/git_helpers.gemspec +71 -0
- data/lib/git_helpers.rb +344 -0
- data/lib/git_helpers/extra_helpers.rb +359 -0
- data/lib/git_helpers/version.rb +4 -0
- data/test/helper.rb +13 -0
- data/test/test_git_helpers.rb +12 -0
- metadata +178 -0
data/bin/gitstatus.rb
ADDED
@@ -0,0 +1,349 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Inspired by https://github.com/olivierverdier/zsh-git-prompt
|
3
|
+
# [commit: 350be32093d0585f395413253536d891c247f538,
|
4
|
+
# last commit checked: 0a6c8b610e799040b612db8888945f502a2ddd9d (2016-02-14))
|
5
|
+
#Inspired by the contrib git script
|
6
|
+
|
7
|
+
require "open3"
|
8
|
+
require "pathname"
|
9
|
+
require "shellwords"
|
10
|
+
require "optparse"
|
11
|
+
require "simplecolor"
|
12
|
+
#require "dr/git" #TODO merge the two implems
|
13
|
+
SimpleColor.mix_in_string
|
14
|
+
|
15
|
+
module GitStatus
|
16
|
+
module Run
|
17
|
+
extend(self)
|
18
|
+
#if we get interrupted once, we don't want to launch any more commands
|
19
|
+
@interrupted=false
|
20
|
+
def runstatus(*args)
|
21
|
+
if !@interrupted
|
22
|
+
begin
|
23
|
+
if Open3.respond_to?(:capture3) then
|
24
|
+
out, error, status=Open3.capture3(*args)
|
25
|
+
return out, status.success?
|
26
|
+
else
|
27
|
+
out = `#{args} 2>/dev/null`
|
28
|
+
status=$?
|
29
|
+
return out, status.success?
|
30
|
+
end
|
31
|
+
rescue Interrupt #interruption
|
32
|
+
@interrupted=true
|
33
|
+
return "", false
|
34
|
+
end
|
35
|
+
else
|
36
|
+
return "", false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
def run(*args)
|
40
|
+
msg,_=runstatus(*args)
|
41
|
+
return msg
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Git
|
46
|
+
include GitStatus::Run
|
47
|
+
attr_reader :msg
|
48
|
+
|
49
|
+
def git?
|
50
|
+
if @git.nil?
|
51
|
+
_,@git=runstatus "git rev-parse"
|
52
|
+
end
|
53
|
+
return @git
|
54
|
+
end
|
55
|
+
def getgitdir
|
56
|
+
return Pathname.new((run "git rev-parse --git-dir").chomp)
|
57
|
+
end
|
58
|
+
def ingitdir?
|
59
|
+
return (run "git rev-parse --is-inside-git-dir") == "true\n"
|
60
|
+
end
|
61
|
+
def worktree?
|
62
|
+
return (run "git rev-parse --is-inside-work-tree") == "true\n"
|
63
|
+
end
|
64
|
+
def bare?
|
65
|
+
return (run "git rev-parse --is-bare-repository") == "true\n"
|
66
|
+
end
|
67
|
+
|
68
|
+
def cd_and_exec(*args)
|
69
|
+
if @path.nil? then
|
70
|
+
yield(*args)
|
71
|
+
else
|
72
|
+
if File.directory?(@path)
|
73
|
+
Dir.chdir(@path) do
|
74
|
+
yield(*args)
|
75
|
+
end
|
76
|
+
else
|
77
|
+
warn "#{@path} is not a directory"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def initialize(path=nil)
|
83
|
+
#a nil path means we want information on the current directory
|
84
|
+
if !path.nil?
|
85
|
+
@path=Pathname.new(path).expand_path
|
86
|
+
end
|
87
|
+
cd_and_exec {git?}
|
88
|
+
end
|
89
|
+
|
90
|
+
def get_msg
|
91
|
+
#gitst="git status --porcelain --branch"
|
92
|
+
#too many git are too old to mix --porcelain with --branch
|
93
|
+
gitm=git="git"
|
94
|
+
gitm="#{git} -c color.ui=always" if $opts[:color]
|
95
|
+
gitm="#{gitm} status --short --branch"
|
96
|
+
@msg=run(gitm)
|
97
|
+
end
|
98
|
+
|
99
|
+
def describe_detached_head
|
100
|
+
case $opts[:describe]
|
101
|
+
when "sha1"
|
102
|
+
describe=(run "git rev-parse --short HEAD").chomp
|
103
|
+
when "describe"
|
104
|
+
describe=(run "git describe HEAD").chomp
|
105
|
+
when "contains"
|
106
|
+
describe=(run "git describe --contains HEAD").chomp
|
107
|
+
when "branch"
|
108
|
+
describe=(run "git describe --contains --all HEAD").chomp
|
109
|
+
when "match"
|
110
|
+
describe=(run "git describe --tags --exact-match HEAD").chomp
|
111
|
+
when "all" #try --contains all, then --all
|
112
|
+
describe=(run "git describe --contains --all HEAD").chomp
|
113
|
+
describe=(run "git describe --all HEAD").chomp if describe.nil? or describe.empty?
|
114
|
+
when "magic"
|
115
|
+
describe1=(run "git describe --contains --all HEAD").chomp
|
116
|
+
describe2=(run "git describe --all HEAD").chomp
|
117
|
+
describe= describe1.length < describe2.length ? describe1 : describe2
|
118
|
+
describe=describe1 if describe2.empty?
|
119
|
+
describe=describe2 if describe1.empty?
|
120
|
+
else
|
121
|
+
describe=(run($opts[:describe])).chomp
|
122
|
+
end
|
123
|
+
if describe.empty?
|
124
|
+
describe=(run "git rev-parse --short HEAD").chomp
|
125
|
+
end
|
126
|
+
@branch=":#{describe}"
|
127
|
+
end
|
128
|
+
|
129
|
+
def parse_head(head)
|
130
|
+
@ahead=@behind=0
|
131
|
+
if (head =~ /## Initial commit on (\S*)/) then
|
132
|
+
@branch=$1
|
133
|
+
if @branch =~ /(\S*)\.\.\./
|
134
|
+
@branch=$1
|
135
|
+
end
|
136
|
+
@branch+="…"
|
137
|
+
elsif (head =~ /## (\S*) \(no branch\)/) then
|
138
|
+
describe_detached_head
|
139
|
+
elsif (head =~ /## (\S*)(.*)/) then
|
140
|
+
branchs=$1
|
141
|
+
rest=$2
|
142
|
+
if (branchs =~ /(\S*)\.\.\.(\S*)/) then
|
143
|
+
@branch=$1
|
144
|
+
remote=$2
|
145
|
+
else
|
146
|
+
@branch=branchs
|
147
|
+
end
|
148
|
+
if (rest =~ /.*\[ahead\s+(\d*)(.*)/) then
|
149
|
+
@ahead=$1.to_i
|
150
|
+
rest=$2
|
151
|
+
end
|
152
|
+
if (rest =~ /.*behind\s+(\d*)\]/) then
|
153
|
+
@behind=$1.to_i
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
def parse_msg
|
159
|
+
msg=@msg
|
160
|
+
#find the branch name, and if we are behind/ahead of upstream
|
161
|
+
lines=msg.uncolor.lines.to_a
|
162
|
+
return if lines.empty?
|
163
|
+
head=lines.shift
|
164
|
+
parse_head(head)
|
165
|
+
|
166
|
+
#get status of files
|
167
|
+
@changed=@staged=@untracked=@conflicts=0
|
168
|
+
lines.each do |line|
|
169
|
+
index = line[0];
|
170
|
+
workdir = line[1];
|
171
|
+
#puts "index: #{index}, workdir: #{workdir}"
|
172
|
+
if index=~/[DRAMTC]/ then
|
173
|
+
@staged+=1
|
174
|
+
end
|
175
|
+
if workdir=~ /[DMT]/ then
|
176
|
+
@changed+=1
|
177
|
+
end
|
178
|
+
if workdir=='?' || index=='?' then
|
179
|
+
@untracked+=1
|
180
|
+
end
|
181
|
+
if workdir=='U' || index=='U' then
|
182
|
+
@conflicts+=1
|
183
|
+
end
|
184
|
+
end
|
185
|
+
@clean=true
|
186
|
+
@clean=false if @staged != 0 || @changed !=0 ||
|
187
|
+
@untracked !=0 || @conflicts !=0
|
188
|
+
end
|
189
|
+
|
190
|
+
def get_status
|
191
|
+
if worktree?
|
192
|
+
get_msg
|
193
|
+
parse_msg
|
194
|
+
if $opts[:sequencer] and !@msg.empty?
|
195
|
+
@sequencer=""
|
196
|
+
gitdir=getgitdir
|
197
|
+
if (gitdir+"rebase-merge").directory?
|
198
|
+
if (gitdir+"rebase-merge/interactive").file?
|
199
|
+
@sequencer<<" rb-i " #REBASE-i
|
200
|
+
else
|
201
|
+
@sequencer<<" rb-m " #REBASE-m
|
202
|
+
end
|
203
|
+
@sequencer<<(gitdir+"rebase-merge/head-name").read.chomp.sub(/^refs\/heads\//,"")
|
204
|
+
end
|
205
|
+
if (gitdir+"rebase-apply").directory?
|
206
|
+
if (gitdir+"rebase-apply/rebasing").file?
|
207
|
+
@sequencer<<" rb" #RB
|
208
|
+
elsif (gitdir+"rebase-apply/applying").file?
|
209
|
+
@sequencer<<" am" #AM
|
210
|
+
else
|
211
|
+
@sequencer<<" am/rb" #AM/REBASE
|
212
|
+
end
|
213
|
+
end
|
214
|
+
if (gitdir+"MERGE_HEAD").file?
|
215
|
+
@sequencer<<" mg" #MERGING
|
216
|
+
end
|
217
|
+
if (gitdir+"CHERRY_PICK_HEAD").file?
|
218
|
+
@sequencer<<" ch" #CHERRY-PICKING
|
219
|
+
end
|
220
|
+
if (gitdir+"BISECT_LOG").file?
|
221
|
+
@sequencer<<" bi" #BISECTING
|
222
|
+
end
|
223
|
+
_,stashstatus=runstatus "git rev-parse --verify refs/stash"
|
224
|
+
if stashstatus
|
225
|
+
stashs=run "git rev-list -g refs/stash"
|
226
|
+
@sequencer<<" $#{stashs.lines.to_a.length}" #Stash
|
227
|
+
end
|
228
|
+
end
|
229
|
+
return !@msg.empty?
|
230
|
+
else
|
231
|
+
if $opts[:sequencer]
|
232
|
+
if ingitdir?
|
233
|
+
if bare?
|
234
|
+
@branch="|bare|"
|
235
|
+
else
|
236
|
+
@branch="|.git|"
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
241
|
+
return false
|
242
|
+
end
|
243
|
+
|
244
|
+
def status
|
245
|
+
cd_and_exec { get_status } if git?
|
246
|
+
end
|
247
|
+
|
248
|
+
def prompt
|
249
|
+
if status
|
250
|
+
return "(" <<
|
251
|
+
@branch.color(:magenta,:bold) <<
|
252
|
+
(@ahead==0 ? "" : "↑"<<@ahead.to_s ) <<
|
253
|
+
(@behind==0 ? "" : "↓"<<@behind.to_s ) <<
|
254
|
+
"|" <<
|
255
|
+
(@staged==0 ? "" : ("●"+@staged.to_s).color(:red) ) <<
|
256
|
+
(@conflicts==0 ? "" : ("✖"+@conflicts.to_s).color(:red) ) <<
|
257
|
+
(@changed==0 ? "" : ("✚"+@changed.to_s).color(:blue) ) <<
|
258
|
+
(@untracked==0 ? "" : "…" ) <<
|
259
|
+
(@clean ? "✔".color(:green,:bold) : "" ) <<
|
260
|
+
(@sequencer.empty? ? "" : @sequencer.color(:yellow) ) <<
|
261
|
+
")"
|
262
|
+
else
|
263
|
+
return "(" << @branch.color(:magenta,:bold) << ")" if @branch
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
def porcelain
|
268
|
+
if git?
|
269
|
+
return "#{@branch}\n#{@ahead}\n#{@behind}\n#{@staged}\n#{@conflicts}\n#{@changed}\n#{@untracked}\n#{@clean?1:0}\n#{@sequencer}\n"
|
270
|
+
else
|
271
|
+
return ""
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
$opts={:color => true, :indent => nil, :sequencer => true, :describe => "magic"}
|
278
|
+
optparse = OptionParser.new do |opt|
|
279
|
+
opt.banner= "#{File.basename($0)} [options] git_dirs"
|
280
|
+
opt.on("-p", "--[no-]prompt", "To be used in shell prompt", "This ensure that color ansi sequence are escaped so that they are not counted as text by the shell") do |v|
|
281
|
+
$opts[:prompt]=v
|
282
|
+
end
|
283
|
+
opt.on("--[no-]porcelain", "Don't format the status but output it in a machine convenient format") do |v|
|
284
|
+
$opts[:porcelain]=v
|
285
|
+
end
|
286
|
+
opt.on("-s", "--[no-]status", "List file", "Print the output of git status additionally of what this program parse") do |v|
|
287
|
+
$opts[:status]=v
|
288
|
+
end
|
289
|
+
opt.on("-c", "--[no-]color", "Color output", "on by default") do |v|
|
290
|
+
$opts[:color]=v
|
291
|
+
end
|
292
|
+
opt.on("--[no-]sequencer", "Show sequencer data (and also look for bare directory)", "on by default") do |v|
|
293
|
+
$opts[:sequencer]=v
|
294
|
+
end
|
295
|
+
opt.on("--indent spaces", Integer, "Indent to use if showing git status", "2 by default, 0 for empty ARGV") do |v|
|
296
|
+
$opts[:indent]=v
|
297
|
+
end
|
298
|
+
opt.on("--describe sha1/describe/contains/branch/match/all/magic", "How to describe a detached HEAD", "'magic' by default") do |v|
|
299
|
+
$opts[:describe]=v
|
300
|
+
end
|
301
|
+
opt.on("--sm", "Recurse on each submodules") do |v|
|
302
|
+
$opts[:submodules]=v
|
303
|
+
end
|
304
|
+
end
|
305
|
+
optparse.parse!
|
306
|
+
|
307
|
+
if !$opts[:color]
|
308
|
+
SimpleColor.enabled=false
|
309
|
+
end
|
310
|
+
|
311
|
+
def prettify_dir(dir)
|
312
|
+
return dir.sub(/^#{ENV['HOME']}/,"~")
|
313
|
+
end
|
314
|
+
|
315
|
+
def gs_output(dir)
|
316
|
+
g=GitStatus::Git.new(dir)
|
317
|
+
puts "#{prettify_dir(dir)+": " if dir}#{g.prompt}"
|
318
|
+
if $opts[:status] and g.git?
|
319
|
+
g.msg.lines.each do |line|
|
320
|
+
print " "*$opts[:indent] + line
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
if $opts[:porcelain]
|
326
|
+
puts GitStatus::Git.new.porcelain
|
327
|
+
elsif $opts[:prompt]
|
328
|
+
SimpleColor.enabled=:shell
|
329
|
+
prompt=GitStatus::Git.new.prompt
|
330
|
+
puts prompt if prompt #in ruby1.8, puts nil output nil...
|
331
|
+
else
|
332
|
+
args=ARGV
|
333
|
+
if args.empty?
|
334
|
+
$opts[:indent]=0 unless $opts[:indent]
|
335
|
+
args=[nil]
|
336
|
+
else
|
337
|
+
$opts[:indent]=2 unless $opts[:indent]
|
338
|
+
end
|
339
|
+
args.each do |dir|
|
340
|
+
gs_output(dir)
|
341
|
+
if $opts[:submodules]
|
342
|
+
Dir.chdir(dir||".") do
|
343
|
+
%x/git submodule status/.each_line.map { |l| l.split[1] }.each do |dir|
|
344
|
+
gs_output(dir)
|
345
|
+
end
|
346
|
+
end
|
347
|
+
end
|
348
|
+
end
|
349
|
+
end
|
@@ -0,0 +1,254 @@
|
|
1
|
+
[1;32mcommit 74804e377d4a54d1173d4393827d4e4b27e4d5d0[m
|
2
|
+
[1;33mdiff --cc libs/header_clean/header_clean.pl[m
|
3
|
+
[1;33mindex e8bcd92,5970580..ae279d0[m
|
4
|
+
[1;33m--- a/libs/header_clean/header_clean.pl[m
|
5
|
+
[1;33m+++ b/libs/header_clean/header_clean.pl[m
|
6
|
+
[1;35m@@@ -105,13 -104,21 +104,23 @@@[m [mfor (my $i = 0; $i <= $#input; $i++) [m
|
7
|
+
}[m
|
8
|
+
}[m
|
9
|
+
[m
|
10
|
+
[1;32m+ # Courtesy of github.com/git/git/blob/ab5d01a/git-add--interactive.perl#L798-L805[m
|
11
|
+
[1;32m+ sub parse_hunk_header {[m
|
12
|
+
[1;32m+ my ($line) = @_;[m
|
13
|
+
[1;32m+ my ($o_ofs, $o_cnt, $n_ofs, $n_cnt) =[m
|
14
|
+
[1;32m+ $line =~ /^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/;[m
|
15
|
+
[1;32m+ $o_cnt = 1 unless defined $o_cnt;[m
|
16
|
+
[1;32m+ $n_cnt = 1 unless defined $n_cnt;[m
|
17
|
+
[1;32m+ return ($o_ofs, $o_cnt, $n_ofs, $n_cnt);[m
|
18
|
+
[1;32m+ }[m
|
19
|
+
[1;32m+ [m
|
20
|
+
sub strip_empty_first_line {[m
|
21
|
+
[1;31m - my $foo = shift(); # Array passed in by reference[m
|
22
|
+
[1;32m + my $array = shift(); # Array passed in by reference[m
|
23
|
+
[m
|
24
|
+
# If the first line is just whitespace remove it[m
|
25
|
+
[1;31m - if (defined($foo->[0]) && $foo->[0] =~ /^\s*$/) {[m
|
26
|
+
[1;31m - shift($foo);[m
|
27
|
+
[1;32m + if (defined($array->[0]) && $array->[0] =~ /^\s*$/) {[m
|
28
|
+
[1;32m + shift(@$array); # Throw away the first line[m
|
29
|
+
}[m
|
30
|
+
[1;32m +[m
|
31
|
+
[1;32m + return 1;[m
|
32
|
+
}[m
|
33
|
+
[1;33mdiff --git a/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js b/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js[m
|
34
|
+
[1;33mindex 4f9adf8..8c13743 100644[m
|
35
|
+
[1;33m--- a/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js[m
|
36
|
+
[1;33m+++ b/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js[m
|
37
|
+
[1;35m@@ -32,7 +32,7 @@[m
|
38
|
+
* @constructor[m
|
39
|
+
* @extends {WebInspector.Widget}[m
|
40
|
+
*/[m
|
41
|
+
[1;31m-WebInspector.Dialog = function()[m
|
42
|
+
[1;32m+[m[1;32mWebInspector.Dialog = function(isModalToElement)[m
|
43
|
+
{[m
|
44
|
+
WebInspector.Widget.call(this, true);[m
|
45
|
+
this.markAsRoot();[m
|
46
|
+
[1;35m@@ -45,6 +45,10 @@[m [mWebInspector.Dialog = function()[m
|
47
|
+
[m
|
48
|
+
this._wrapsContent = false;[m
|
49
|
+
this._dimmed = false;[m
|
50
|
+
[1;32m+[m[1;32m this._isModalToElement = isModalToElement;[m
|
51
|
+
[1;32m+[m
|
52
|
+
[1;32m+[m[1;32m this._glassPane = new WebInspector.GlassPane(relativeToElement, isModalToElement);[m
|
53
|
+
[1;32m+[m
|
54
|
+
/** @type {!Map<!HTMLElement, number>} */[m
|
55
|
+
this._tabIndexMap = new Map();[m
|
56
|
+
}[m
|
57
|
+
[1;35m@@ -62,16 +65,16 @@[m [mWebInspector.Dialog.prototype = {[m
|
58
|
+
/**[m
|
59
|
+
* @override[m
|
60
|
+
*/[m
|
61
|
+
[1;31m- show: function()[m
|
62
|
+
[1;32m+[m[1;32m show: function(isModalToElement)[m
|
63
|
+
{[m
|
64
|
+
if (WebInspector.Dialog._instance)[m
|
65
|
+
WebInspector.Dialog._instance.detach();[m
|
66
|
+
WebInspector.Dialog._instance = this;[m
|
67
|
+
[m
|
68
|
+
[1;31m- var document = /** @type {!Document} */ (WebInspector.Dialog._modalHostView.element.ownerDocument);[m
|
69
|
+
[1;32m+[m[1;32m var document = /** @type {!Document} */ (WebInspector.Dialog._modalHostView.element.ownerDocument, isModalToElement);[m
|
70
|
+
this._disableTabIndexOnElements(document);[m
|
71
|
+
[m
|
72
|
+
[1;31m- this._glassPane = new WebInspector.GlassPane(document, this._dimmed);[m
|
73
|
+
[1;32m+[m[1;32m this._glassPane = new WebInspector.GlassPane(document, isModalToElement);[m
|
74
|
+
this._glassPane.element.addEventListener("click", this._onGlassPaneClick.bind(this), false);[m
|
75
|
+
WebInspector.GlassPane.DefaultFocusedViewStack.push(this);[m
|
76
|
+
[m
|
77
|
+
[33mcommit 6e50ba922f45d810b77de941a6a848df4a9ab44a[m[33m ([m[1;36mHEAD[m[33m -> [m[1;32mmaster[m[33m)[m
|
78
|
+
Author: Damien Robert <damien.olivier.robert+git@gmail.com>
|
79
|
+
Date: Sun Mar 13 18:58:41 2016 +0100
|
80
|
+
|
81
|
+
Rename symlink
|
82
|
+
|
83
|
+
[1mdiff --git a/d b/d[m
|
84
|
+
[1mdeleted file mode 100755[m
|
85
|
+
[1mindex 4bcfe98..0000000[m
|
86
|
+
[1m--- a/d[m
|
87
|
+
[1m+++ /dev/null[m
|
88
|
+
[36m@@ -1 +0,0 @@[m
|
89
|
+
[31m-d[m
|
90
|
+
[1mdiff --git a/d b/d[m
|
91
|
+
[1mnew file mode 120000[m
|
92
|
+
[1mindex 0000000..c59d9b6[m
|
93
|
+
[1m--- /dev/null[m
|
94
|
+
[1m+++ b/d[m
|
95
|
+
[36m@@ -0,0 +1 @@[m
|
96
|
+
[32m+[m[32md[m
|
97
|
+
[m
|
98
|
+
[1mdiff --git a/e b/e[m
|
99
|
+
[1mdeleted file mode 120000[m
|
100
|
+
[1mindex c59d9b6..0000000[m
|
101
|
+
[1m--- a/e[m
|
102
|
+
[1m+++ /dev/null[m
|
103
|
+
[36m@@ -1 +0,0 @@[m
|
104
|
+
[31m-d[m
|
105
|
+
[m
|
106
|
+
|
107
|
+
[33mcommit 8b9d73ca7c9e9da18bdb0beff3ab38c49b4e5ae1[m
|
108
|
+
Author: Damien Robert <damien.olivier.robert+git@gmail.com>
|
109
|
+
Date: Sun Mar 13 18:58:31 2016 +0100
|
110
|
+
|
111
|
+
symlink
|
112
|
+
|
113
|
+
[1mdiff --git a/e b/e[m
|
114
|
+
[1mnew file mode 120000[m
|
115
|
+
[1mindex 0000000..c59d9b6[m
|
116
|
+
[1m--- /dev/null[m
|
117
|
+
[1m+++ b/e[m
|
118
|
+
[36m@@ -0,0 +1 @@[m
|
119
|
+
[32m+[m[32md[m
|
120
|
+
[m
|
121
|
+
|
122
|
+
[33mcommit 00c13fb19a63a7e753a2f06aaa214c05726c9bfb[m
|
123
|
+
Author: Damien Robert <damien.olivier.robert+git@gmail.com>
|
124
|
+
Date: Sun Mar 13 18:58:21 2016 +0100
|
125
|
+
|
126
|
+
copy + file permission
|
127
|
+
|
128
|
+
[1mdiff --git a/b2 b/c2[m
|
129
|
+
[1msimilarity index 100%[m
|
130
|
+
[1mcopy from b2[m
|
131
|
+
[1mcopy to c2[m
|
132
|
+
[1mdiff --git a/d b/d[m
|
133
|
+
[1mold mode 100644[m
|
134
|
+
[1mnew mode 100755[m
|
135
|
+
|
136
|
+
[33mcommit 8af4fb242d1040e291897a7d047da4dfbe97e9ef[m
|
137
|
+
Author: Damien Robert <damien.olivier.robert+git@gmail.com>
|
138
|
+
Date: Sun Mar 13 18:58:02 2016 +0100
|
139
|
+
|
140
|
+
Rename
|
141
|
+
|
142
|
+
[1mdiff --git a/b b/b2[m
|
143
|
+
[1msimilarity index 100%[m
|
144
|
+
[1mrename from b[m
|
145
|
+
[1mrename to b2[m
|
146
|
+
|
147
|
+
[33mcommit a1aad6c1153b923e0c5d14bc1bbbdf5e39d89591[m
|
148
|
+
Author: Damien Robert <damien.olivier.robert+git@gmail.com>
|
149
|
+
Date: Sun Mar 13 18:57:39 2016 +0100
|
150
|
+
|
151
|
+
Adding d, new line to b
|
152
|
+
|
153
|
+
[1mdiff --git a/b b/b[m
|
154
|
+
[1mindex 6178079..0939735 100644[m
|
155
|
+
[1m--- a/b[m
|
156
|
+
[1m+++ b/b[m
|
157
|
+
[36m@@ -1 +1,2 @@[m
|
158
|
+
b[m
|
159
|
+
[32m+[m[32mnew line on b[m
|
160
|
+
[1mdiff --git a/d b/d[m
|
161
|
+
[1mnew file mode 100644[m
|
162
|
+
[1mindex 0000000..4bcfe98[m
|
163
|
+
[1m--- /dev/null[m
|
164
|
+
[1m+++ b/d[m
|
165
|
+
[36m@@ -0,0 +1 @@[m
|
166
|
+
[32m+[m[32md[m
|
167
|
+
|
168
|
+
[33mcommit fcf9b0274a1f034ced762c269f835e198693704a[m
|
169
|
+
Author: Damien Robert <damien.olivier.robert+git@gmail.com>
|
170
|
+
Date: Sun Mar 13 18:57:39 2016 +0100
|
171
|
+
|
172
|
+
Adding b
|
173
|
+
|
174
|
+
[1mdiff --git a/b b/b[m
|
175
|
+
[1mnew file mode 100644[m
|
176
|
+
[1mindex 0000000..6178079[m
|
177
|
+
[1m--- /dev/null[m
|
178
|
+
[1m+++ b/b[m
|
179
|
+
[36m@@ -0,0 +1 @@[m
|
180
|
+
[32m+[m[32mb[m
|
181
|
+
|
182
|
+
[33mcommit 6fa1c4ab2a8b2be408791d874155c95511ecc0ce[m
|
183
|
+
Author: Damien Robert <damien.olivier.robert+git@gmail.com>
|
184
|
+
Date: Sun Mar 13 18:57:39 2016 +0100
|
185
|
+
|
186
|
+
Adding a
|
187
|
+
|
188
|
+
[1mdiff --git a/a b/a[m
|
189
|
+
[1mnew file mode 100644[m
|
190
|
+
[1mindex 0000000..7898192[m
|
191
|
+
[1m--- /dev/null[m
|
192
|
+
[1m+++ b/a[m
|
193
|
+
[36m@@ -0,0 +1 @@[m
|
194
|
+
[32m+[m[32ma[m
|
195
|
+
|
196
|
+
Submodule ruby/gems/simplecolor contains untracked content
|
197
|
+
Submodule ruby/gems/simplecolor contains modified content
|
198
|
+
Submodule ruby/gems/simplecolor a5c060d..ac178d7:
|
199
|
+
> Concatenate ANSI escape sequences inside the \e
|
200
|
+
> Add possibility to copy colors
|
201
|
+
> Sometimes \e[m is abused for \e[0m
|
202
|
+
> More exceptions
|
203
|
+
> Merge some color regexp and raise exception on bogus colors
|
204
|
+
> Fix SimpleColor#uncolor!
|
205
|
+
> Change ANSI Regexps
|
206
|
+
> rake doc fails for now with Rake 11
|
207
|
+
> Add uncolor tests
|
208
|
+
> ColorWrapper: unify gestion of arg
|
209
|
+
|
210
|
+
Submodule script/others/republique f4c0876...0000000 (submodule deleted)
|
211
|
+
Submodule script/others/republique 0000000...f4c0876 (not checked out)
|
212
|
+
Submodule plam 0000000...c43a6e4 (new submodule)
|
213
|
+
Submodule plam c43a6e4...9215cb5 (commits not present)
|
214
|
+
Submodule plam 9215cb5..4b41ae0 (rewind):
|
215
|
+
< Adding d, new line to b
|
216
|
+
Submodule plam de44db5...d6ed7c1:
|
217
|
+
> Uhihih
|
218
|
+
< Ohoho
|
219
|
+
|
220
|
+
[1mdiff --git i/a w/a[m
|
221
|
+
[1mindex 7898192..442406a 100644[m
|
222
|
+
[1m--- i/a[m
|
223
|
+
[1m+++ w/a[m
|
224
|
+
[36m@@ -1 +1,2 @@[m
|
225
|
+
a[m
|
226
|
+
[7;34m+[m
|
227
|
+
[1mdiff --git i/b2 w/b2[m
|
228
|
+
[1mindex 0939735..d70291d 100644[m
|
229
|
+
[1m--- i/b2[m
|
230
|
+
[1m+++ w/b2[m
|
231
|
+
[36m@@ -1,2 +1,2 @@[m
|
232
|
+
[31m-b[m
|
233
|
+
[32m+[m[32mb[m[7;34m [m
|
234
|
+
new line on b[m
|
235
|
+
[1mdiff --git i/b w/b[m
|
236
|
+
[1mindex 3cd10f0..3cc89da 100644[m
|
237
|
+
[1m--- i/b[m
|
238
|
+
[1m+++ w/b[m
|
239
|
+
[36m@@ -1,5 +1,5 @@[m
|
240
|
+
b[m
|
241
|
+
new line on b[m
|
242
|
+
ohoh[m
|
243
|
+
[31m- [m
|
244
|
+
[32m+[m
|
245
|
+
bl2[m
|
246
|
+
|
247
|
+
diff --git 1/2/umount 2/2/umount
|
248
|
+
new file mode 100755
|
249
|
+
index 0000000..bb9ce29
|
250
|
+
Binary files /dev/null and 2/2/umount differ
|
251
|
+
diff --git 1/2/umount 2/2/umount
|
252
|
+
deleted file mode 100755
|
253
|
+
index bb9ce29..0000000
|
254
|
+
Binary files 1/2/umount and /dev/null differ
|