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
9 years ago
by
Edward Thomson
Committed by
Edward Thomson
9 years ago
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"
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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.
...
...
This diff is collapsed.
Click to expand it.
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"
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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