Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
git
提交
f4241c4c
G
git
项目概览
李少辉-开发者
/
git
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
git
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f4241c4c
编写于
6月 22, 2006
作者:
J
Junio C Hamano
浏览文件
操作
浏览文件
下载
差异文件
Merge early parts of branch 'js/diff'
上级
16bf4e1f
cd112cef
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
73 addition
and
11 deletion
+73
-11
diff.c
diff.c
+70
-9
diff.h
diff.h
+2
-1
pager.c
pager.c
+1
-1
未找到文件。
diff.c
浏览文件 @
f4241c4c
...
...
@@ -25,6 +25,20 @@ int git_diff_config(const char *var, const char *value)
return
git_default_config
(
var
,
value
);
}
enum
color_diff
{
DIFF_PLAIN
=
0
,
DIFF_METAINFO
=
1
,
DIFF_FILE_OLD
=
2
,
DIFF_FILE_NEW
=
3
,
};
static
const
char
*
diff_colors
[]
=
{
"
\033
[0;0m"
,
"
\033
[1;35m"
,
"
\033
[1;31m"
,
"
\033
[1;34m"
,
};
static
char
*
quote_one
(
const
char
*
str
)
{
int
needlen
;
...
...
@@ -177,23 +191,54 @@ static int fill_mmfile(mmfile_t *mf, struct diff_filespec *one)
}
struct
emit_callback
{
struct
xdiff_emit_state
xm
;
int
nparents
,
color_diff
;
const
char
**
label_path
;
};
static
int
fn_out
(
void
*
priv
,
mmbuffer_t
*
mb
,
int
nbuf
)
static
inline
void
color_diff
(
int
diff_use_color
,
enum
color_diff
ix
)
{
if
(
diff_use_color
)
fputs
(
diff_colors
[
ix
],
stdout
);
}
static
void
fn_out_consume
(
void
*
priv
,
char
*
line
,
unsigned
long
len
)
{
int
i
;
struct
emit_callback
*
ecbdata
=
priv
;
if
(
ecbdata
->
label_path
[
0
])
{
color_diff
(
ecbdata
->
color_diff
,
DIFF_METAINFO
);
printf
(
"--- %s
\n
"
,
ecbdata
->
label_path
[
0
]);
color_diff
(
ecbdata
->
color_diff
,
DIFF_METAINFO
);
printf
(
"+++ %s
\n
"
,
ecbdata
->
label_path
[
1
]);
ecbdata
->
label_path
[
0
]
=
ecbdata
->
label_path
[
1
]
=
NULL
;
}
for
(
i
=
0
;
i
<
nbuf
;
i
++
)
if
(
!
fwrite
(
mb
[
i
].
ptr
,
mb
[
i
].
size
,
1
,
stdout
))
return
-
1
;
return
0
;
/* This is not really necessary for now because
* this codepath only deals with two-way diffs.
*/
for
(
i
=
0
;
i
<
len
&&
line
[
i
]
==
'@'
;
i
++
)
;
if
(
2
<=
i
&&
i
<
len
&&
line
[
i
]
==
' '
)
{
ecbdata
->
nparents
=
i
-
1
;
color_diff
(
ecbdata
->
color_diff
,
DIFF_METAINFO
);
}
else
if
(
len
<
ecbdata
->
nparents
)
color_diff
(
ecbdata
->
color_diff
,
DIFF_PLAIN
);
else
{
int
nparents
=
ecbdata
->
nparents
;
int
color
=
DIFF_PLAIN
;
for
(
i
=
0
;
i
<
nparents
&&
len
;
i
++
)
{
if
(
line
[
i
]
==
'-'
)
color
=
DIFF_FILE_OLD
;
else
if
(
line
[
i
]
==
'+'
)
color
=
DIFF_FILE_NEW
;
}
color_diff
(
ecbdata
->
color_diff
,
color
);
}
fwrite
(
line
,
len
,
1
,
stdout
);
color_diff
(
ecbdata
->
color_diff
,
DIFF_PLAIN
);
}
static
char
*
pprint_rename
(
const
char
*
a
,
const
char
*
b
)
...
...
@@ -549,25 +594,35 @@ static void builtin_diff(const char *name_a,
b_two
=
quote_two
(
"b/"
,
name_b
);
lbl
[
0
]
=
DIFF_FILE_VALID
(
one
)
?
a_one
:
"/dev/null"
;
lbl
[
1
]
=
DIFF_FILE_VALID
(
two
)
?
b_two
:
"/dev/null"
;
color_diff
(
o
->
color_diff
,
DIFF_METAINFO
);
printf
(
"diff --git %s %s
\n
"
,
a_one
,
b_two
);
if
(
lbl
[
0
][
0
]
==
'/'
)
{
/* /dev/null */
color_diff
(
o
->
color_diff
,
DIFF_METAINFO
);
printf
(
"new file mode %06o
\n
"
,
two
->
mode
);
if
(
xfrm_msg
&&
xfrm_msg
[
0
])
if
(
xfrm_msg
&&
xfrm_msg
[
0
])
{
color_diff
(
o
->
color_diff
,
DIFF_METAINFO
);
puts
(
xfrm_msg
);
}
}
else
if
(
lbl
[
1
][
0
]
==
'/'
)
{
printf
(
"deleted file mode %06o
\n
"
,
one
->
mode
);
if
(
xfrm_msg
&&
xfrm_msg
[
0
])
if
(
xfrm_msg
&&
xfrm_msg
[
0
])
{
color_diff
(
o
->
color_diff
,
DIFF_METAINFO
);
puts
(
xfrm_msg
);
}
}
else
{
if
(
one
->
mode
!=
two
->
mode
)
{
color_diff
(
o
->
color_diff
,
DIFF_METAINFO
);
printf
(
"old mode %06o
\n
"
,
one
->
mode
);
color_diff
(
o
->
color_diff
,
DIFF_METAINFO
);
printf
(
"new mode %06o
\n
"
,
two
->
mode
);
}
if
(
xfrm_msg
&&
xfrm_msg
[
0
])
if
(
xfrm_msg
&&
xfrm_msg
[
0
])
{
color_diff
(
o
->
color_diff
,
DIFF_METAINFO
);
puts
(
xfrm_msg
);
}
/*
* we do not run diff between different kind
* of objects.
...
...
@@ -575,6 +630,7 @@ static void builtin_diff(const char *name_a,
if
((
one
->
mode
^
two
->
mode
)
&
S_IFMT
)
goto
free_ab_and_return
;
if
(
complete_rewrite
)
{
color_diff
(
o
->
color_diff
,
DIFF_PLAIN
);
emit_rewrite_diff
(
name_a
,
name_b
,
one
,
two
);
goto
free_ab_and_return
;
}
...
...
@@ -602,7 +658,9 @@ static void builtin_diff(const char *name_a,
xdemitcb_t
ecb
;
struct
emit_callback
ecbdata
;
memset
(
&
ecbdata
,
0
,
sizeof
(
ecbdata
));
ecbdata
.
label_path
=
lbl
;
ecbdata
.
color_diff
=
o
->
color_diff
;
xpp
.
flags
=
XDF_NEED_MINIMAL
;
xecfg
.
ctxlen
=
o
->
context
;
xecfg
.
flags
=
XDL_EMIT_FUNCNAMES
;
...
...
@@ -612,8 +670,9 @@ static void builtin_diff(const char *name_a,
xecfg
.
ctxlen
=
strtoul
(
diffopts
+
10
,
NULL
,
10
);
else
if
(
!
strncmp
(
diffopts
,
"-u"
,
2
))
xecfg
.
ctxlen
=
strtoul
(
diffopts
+
2
,
NULL
,
10
);
ecb
.
outf
=
fn_out
;
ecb
.
outf
=
xdiff_outf
;
ecb
.
priv
=
&
ecbdata
;
ecbdata
.
xm
.
consume
=
fn_out_consume
;
xdl_diff
(
&
mf1
,
&
mf2
,
&
xpp
,
&
xecfg
,
&
ecb
);
}
...
...
@@ -1456,6 +1515,8 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
else
if
(
40
<
options
->
abbrev
)
options
->
abbrev
=
40
;
}
else
if
(
!
strcmp
(
arg
,
"--color"
))
options
->
color_diff
=
1
;
else
return
0
;
return
1
;
...
...
diff.h
浏览文件 @
f4241c4c
...
...
@@ -32,7 +32,8 @@ struct diff_options {
full_index:
1
,
silent_on_remove:
1
,
find_copies_harder:
1
,
summary:
1
;
summary:
1
,
color_diff:
1
;
int
context
;
int
break_opt
;
int
detect_rename
;
...
...
pager.c
浏览文件 @
f4241c4c
...
...
@@ -46,7 +46,7 @@ void setup_pager(void)
close
(
fd
[
0
]);
close
(
fd
[
1
]);
setenv
(
"LESS"
,
"-S"
,
0
);
setenv
(
"LESS"
,
"-
R
S"
,
0
);
run_pager
(
pager
);
die
(
"unable to execute pager '%s'"
,
pager
);
exit
(
255
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录