Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
git2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
git2
Commits
6c014bcc
Commit
6c014bcc
authored
Sep 29, 2015
by
Edward Thomson
Committed by
Edward Thomson
Oct 05, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
diff: don't feed large files to xdiff
parent
e4352066
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
23 additions
and
20 deletions
+23
-20
src/checkout.c
+2
-1
src/diff_patch.c
+4
-0
src/diff_xdiff.c
+7
-0
src/diff_xdiff.h
+5
-0
src/merge.c
+0
-1
src/merge_file.c
+2
-2
src/merge_file.h
+0
-13
tests/merge/files.c
+3
-3
No files found.
src/checkout.c
View file @
6c014bcc
...
...
@@ -18,6 +18,7 @@
#include "git2/submodule.h"
#include "git2/sys/index.h"
#include "git2/sys/filter.h"
#include "git2/merge.h"
#include "refs.h"
#include "repository.h"
...
...
@@ -27,7 +28,7 @@
#include "diff.h"
#include "pathspec.h"
#include "buf_text.h"
#include "
merge_file
.h"
#include "
diff_xdiff
.h"
#include "path.h"
#include "attr.h"
#include "pool.h"
...
...
src/diff_patch.c
View file @
6c014bcc
...
...
@@ -30,6 +30,10 @@ static void diff_patch_update_binary(git_patch *patch)
(
patch
->
nfile
.
file
->
flags
&
GIT_DIFF_FLAG_BINARY
)
!=
0
)
patch
->
delta
->
flags
|=
GIT_DIFF_FLAG_BINARY
;
else
if
(
patch
->
ofile
.
file
->
size
>
GIT_XDIFF_MAX_SIZE
||
patch
->
nfile
.
file
->
size
>
GIT_XDIFF_MAX_SIZE
)
patch
->
delta
->
flags
|=
GIT_DIFF_FLAG_BINARY
;
else
if
((
patch
->
ofile
.
file
->
flags
&
DIFF_FLAGS_NOT_BINARY
)
!=
0
&&
(
patch
->
nfile
.
file
->
flags
&
DIFF_FLAGS_NOT_BINARY
)
!=
0
)
patch
->
delta
->
flags
|=
GIT_DIFF_FLAG_NOT_BINARY
;
...
...
src/diff_xdiff.c
View file @
6c014bcc
...
...
@@ -4,6 +4,7 @@
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#include "git2/errors.h"
#include "common.h"
#include "diff.h"
#include "diff_driver.h"
...
...
@@ -208,6 +209,12 @@ static int git_xdiff(git_diff_output *output, git_patch *patch)
git_patch__old_data
(
&
info
.
xd_old_data
.
ptr
,
&
info
.
xd_old_data
.
size
,
patch
);
git_patch__new_data
(
&
info
.
xd_new_data
.
ptr
,
&
info
.
xd_new_data
.
size
,
patch
);
if
(
info
.
xd_old_data
.
size
>
GIT_XDIFF_MAX_SIZE
||
info
.
xd_new_data
.
size
>
GIT_XDIFF_MAX_SIZE
)
{
giterr_set
(
GITERR_INVALID
,
"files too large for diff"
);
return
-
1
;
}
xdl_diff
(
&
info
.
xd_old_data
,
&
info
.
xd_new_data
,
&
xo
->
params
,
&
xo
->
config
,
&
xo
->
callback
);
...
...
src/diff_xdiff.h
View file @
6c014bcc
...
...
@@ -11,6 +11,11 @@
#include "diff_patch.h"
#include "xdiff/xdiff.h"
/* xdiff cannot cope with large files. these files should not be passed to
* xdiff. callers should treat these large files as binary.
*/
#define GIT_XDIFF_MAX_SIZE (1024LL * 1024 * 1023)
/* A git_xdiff_output is a git_diff_output with extra fields necessary
* to use libxdiff. Calling git_xdiff_init() will set the diff_cb field
* of the output to use xdiff to generate the diffs.
...
...
src/merge.c
View file @
6c014bcc
...
...
@@ -20,7 +20,6 @@
#include "diff.h"
#include "checkout.h"
#include "tree.h"
#include "merge_file.h"
#include "blob.h"
#include "oid.h"
#include "index.h"
...
...
src/merge_file.c
View file @
6c014bcc
...
...
@@ -7,10 +7,10 @@
#include "common.h"
#include "repository.h"
#include "merge_file.h"
#include "posix.h"
#include "fileops.h"
#include "index.h"
#include "diff_xdiff.h"
#include "git2/repository.h"
#include "git2/object.h"
...
...
@@ -199,7 +199,7 @@ static bool merge_file__is_binary(const git_merge_file_input *file)
{
size_t
len
=
file
?
file
->
size
:
0
;
if
(
len
>
GIT_
MERGE_FILE_XDIFF_MAX
)
if
(
len
>
GIT_
XDIFF_MAX_SIZE
)
return
true
;
if
(
len
>
GIT_MERGE_FILE_BINARY_SIZE
)
len
=
GIT_MERGE_FILE_BINARY_SIZE
;
...
...
src/merge_file.h
deleted
100644 → 0
View file @
e4352066
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_filediff_h__
#define INCLUDE_filediff_h__
/* xdiff cannot cope with large files, just treat them as binary */
#define GIT_MERGE_FILE_XDIFF_MAX (1024UL * 1024 * 1023)
#endif
tests/merge/files.c
View file @
6c014bcc
...
...
@@ -3,10 +3,10 @@
#include "git2/merge.h"
#include "buffer.h"
#include "merge.h"
#include "merge_file.h"
#include "merge_helpers.h"
#include "refs.h"
#include "fileops.h"
#include "diff_xdiff.h"
#define TEST_REPO_PATH "merge-resolve"
#define TEST_INDEX_PATH TEST_REPO_PATH "/.git/index"
...
...
@@ -296,11 +296,11 @@ void test_merge_files__skips_large_files(void)
git_merge_file_options
opts
=
GIT_MERGE_FILE_OPTIONS_INIT
;
git_merge_file_result
result
=
{
0
};
ours
.
size
=
GIT_
MERGE_FILE_XDIFF_MAX
+
1
;
ours
.
size
=
GIT_
XDIFF_MAX_SIZE
+
1
;
ours
.
path
=
"testfile.txt"
;
ours
.
mode
=
0100755
;
theirs
.
size
=
GIT_
MERGE_FILE_XDIFF_MAX
+
1
;
theirs
.
size
=
GIT_
XDIFF_MAX_SIZE
+
1
;
theirs
.
path
=
"testfile.txt"
;
theirs
.
mode
=
0100755
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment