* stgit truncates binary files to zero length when applying patches
@ 2005-11-15 14:42 Karl Hasselström
2005-11-16 11:11 ` Catalin Marinas
0 siblings, 1 reply; 35+ messages in thread
From: Karl Hasselström @ 2005-11-15 14:42 UTC (permalink / raw)
To: catalin.marinas; +Cc: git
When applying patches and not fast-forwarding, stgit truncates the
binary files to zero length:
$ cg-init .
defaulting to local storage area
Committing initial tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
Committed as 73161b6ee428ac8b1c1b16b560c40e13330693d2.
$ stg init
$ stg new foo
Invoking the editor: "emacs .stgit.msg"... done (exit code: 0)
$ cp /bin/bash .
$ stg add bash
$ stg refresh
Refreshing patch "foo"... done
$ ls -l
total 584
-rwxr-xr-x 1 kha vtech 593304 Nov 15 15:34 bash*
$ stg pop
Popping patch "foo"... done
No patches applied
$ stg new bar
Invoking the editor: "emacs .stgit.msg"... done (exit code: 0)
$ echo bar > bar.txt
$ stg add bar.txt
$ stg refresh
Refreshing patch "bar"... done
$ stg push foo
Pushing patch "foo"... done
Now at patch "foo"
$ ls -l
total 4
-rw-r--r-- 1 kha vtech 4 Nov 15 15:34 bar.txt
-rwxr-xr-x 1 kha vtech 0 Nov 15 15:35 bash*
Without the "bar" patch, popping and then pushing "foo" works as
expected.
--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: stgit truncates binary files to zero length when applying patches
2005-11-15 14:42 stgit truncates binary files to zero length when applying patches Karl Hasselström
@ 2005-11-16 11:11 ` Catalin Marinas
2005-11-16 11:54 ` Karl Hasselström
2005-11-16 18:30 ` Junio C Hamano
0 siblings, 2 replies; 35+ messages in thread
From: Catalin Marinas @ 2005-11-16 11:11 UTC (permalink / raw)
To: Karl Hasselström; +Cc: git
On 15/11/05, Karl Hasselström <kha@treskal.com> wrote:
> When applying patches and not fast-forwarding, stgit truncates the
> binary files to zero length:
I've never tried binaries with StGIT before. When pushing a patch, if
a merge is needed (like in your case, the base of the foo patch has
changed), StGIT first tries "git-diff-tree | git-apply" for speed
reasons. If this fails, it falls back to a three-way merge.
Unfortunately, git-apply doesn't fail for patches including binary
files and simply creates an empty file. I think git-apply should be
changed to fail to apply this kind of patches.
--
Catalin
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: stgit truncates binary files to zero length when applying patches
2005-11-16 11:11 ` Catalin Marinas
@ 2005-11-16 11:54 ` Karl Hasselström
2005-11-16 12:31 ` Catalin Marinas
2005-11-16 18:30 ` Junio C Hamano
1 sibling, 1 reply; 35+ messages in thread
From: Karl Hasselström @ 2005-11-16 11:54 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git
On 2005-11-16 11:11:56 +0000, Catalin Marinas wrote:
> On 15/11/05, Karl Hasselström <kha@treskal.com> wrote:
>
> > When applying patches and not fast-forwarding, stgit truncates the
> > binary files to zero length:
>
> I've never tried binaries with StGIT before.
I don't blame you. Binary patches aren't something I normally create
either. It's just that I find stgit patches a good way to logically
structure a largeish change that I'm working on before committing it.
(I could probably accoplish the same thing with one branch instead of
each stgit patch, but then it would be quite a lot of work to manually
push updates through all the branches.)
> When pushing a patch, if a merge is needed (like in your case, the
> base of the foo patch has changed), StGIT first tries "git-diff-tree
> | git-apply" for speed reasons. If this fails, it falls back to a
> three-way merge.
>
> Unfortunately, git-apply doesn't fail for patches including binary
> files and simply creates an empty file. I think git-apply should be
> changed to fail to apply this kind of patches.
Yes, at least if stgit is going to continue to use it like this.
Refusing to handle binary files is somewhat disappointing, but still
OK; agreeing to handle them and then silently wiping them is a bit
less OK. (But don't worry; it is a perfect world, after all, so of
course I had backups. :-)
--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: stgit truncates binary files to zero length when applying patches
2005-11-16 11:54 ` Karl Hasselström
@ 2005-11-16 12:31 ` Catalin Marinas
2005-11-16 13:03 ` Karl Hasselström
0 siblings, 1 reply; 35+ messages in thread
From: Catalin Marinas @ 2005-11-16 12:31 UTC (permalink / raw)
To: Karl Hasselström; +Cc: git
On 16/11/05, Karl Hasselström <kha@treskal.com> wrote:
> On 2005-11-16 11:11:56 +0000, Catalin Marinas wrote:
> > Unfortunately, git-apply doesn't fail for patches including binary
> > files and simply creates an empty file. I think git-apply should be
> > changed to fail to apply this kind of patches.
>
> Yes, at least if stgit is going to continue to use it like this.
> Refusing to handle binary files is somewhat disappointing, but still
> OK; agreeing to handle them and then silently wiping them is a bit
> less OK.
A workaround for this would be to add a config option for StGIT to
always use the three-way merge for pushing patches. The problem with
this is speed since git-diff-tree | git-apply is much faster (and
pretty safe since fuzzy patching is not allowed) and most of the
patches would apply cleanly with only this.
--
Catalin
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: stgit truncates binary files to zero length when applying patches
2005-11-16 12:31 ` Catalin Marinas
@ 2005-11-16 13:03 ` Karl Hasselström
0 siblings, 0 replies; 35+ messages in thread
From: Karl Hasselström @ 2005-11-16 13:03 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git
On 2005-11-16 12:31:27 +0000, Catalin Marinas wrote:
> On 16/11/05, Karl Hasselström <kha@treskal.com> wrote:
>
> > On 2005-11-16 11:11:56 +0000, Catalin Marinas wrote:
> >
> > > Unfortunately, git-apply doesn't fail for patches including
> > > binary files and simply creates an empty file. I think git-apply
> > > should be changed to fail to apply this kind of patches.
> >
> > Yes, at least if stgit is going to continue to use it like this.
> > Refusing to handle binary files is somewhat disappointing, but
> > still OK; agreeing to handle them and then silently wiping them is
> > a bit less OK.
>
> A workaround for this would be to add a config option for StGIT to
> always use the three-way merge for pushing patches. The problem with
> this is speed since git-diff-tree | git-apply is much faster (and
> pretty safe since fuzzy patching is not allowed) and most of the
> patches would apply cleanly with only this.
The proper fix has to be to convince git-apply to either handle
patches with binary files, or to make it fail; in both cases, stgit
will be fine. If the former is somehow intractable or undesirable, and
the latter would break existing callers (and/or inconvenience users),
perhaps it could fail on binary files only when a --text-only flag was
given.
--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: stgit truncates binary files to zero length when applying patches
2005-11-16 11:11 ` Catalin Marinas
2005-11-16 11:54 ` Karl Hasselström
@ 2005-11-16 18:30 ` Junio C Hamano
2005-11-16 22:15 ` [PATCH] git-apply: fail if a patch cannot be applied Junio C Hamano
2005-11-17 1:21 ` master has some toys Junio C Hamano
1 sibling, 2 replies; 35+ messages in thread
From: Junio C Hamano @ 2005-11-16 18:30 UTC (permalink / raw)
To: Catalin Marinas; +Cc: git
Catalin Marinas <catalin.marinas@gmail.com> writes:
> ... When pushing a patch, if
> a merge is needed (like in your case, the base of the foo patch has
> changed), StGIT first tries "git-diff-tree | git-apply" for speed
> reasons. If this fails, it falls back to a three-way merge.
I think many of the scripts rely on git-apply failing reliably
for unapplicable patches. I'll do a new test script in git.git/t
and if it fails on binary files, try to fix it today.
Incidentally, for the last couple of days, I was working on
adding a very limited binary file diff support to "diff piped to
apply" pattern, and the result has been posted as "reworked
rebase" patches. It is very limited in the sense that the diff
output does not attempt to be useful if the patch consumer does
not have both pre- and post-image blob, but for the use of
StGIT's internal patch replaying purposes that is not a concern,
so you might be interested in taking a look.
^ permalink raw reply [flat|nested] 35+ messages in thread
* [PATCH] git-apply: fail if a patch cannot be applied.
2005-11-16 18:30 ` Junio C Hamano
@ 2005-11-16 22:15 ` Junio C Hamano
2005-11-17 1:21 ` master has some toys Junio C Hamano
1 sibling, 0 replies; 35+ messages in thread
From: Junio C Hamano @ 2005-11-16 22:15 UTC (permalink / raw)
To: git; +Cc: Catalin Marinas, Karl Hasselström
Recently we fixed 'git-apply --stat' not to barf on a binary
differences. But it accidentally broke the error detection when
we actually attempt to apply them.
This commit fixes the problem and adds test cases.
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
Junio C Hamano <junkio@cox.net> writes:
> Catalin Marinas <catalin.marinas@gmail.com> writes:
>
>> ... When pushing a patch, if
>> a merge is needed (like in your case, the base of the foo patch has
>> changed), StGIT first tries "git-diff-tree | git-apply" for speed
>> reasons. If this fails, it falls back to a three-way merge.
>
> I think many of the scripts rely on git-apply failing reliably
> for unapplicable patches. I'll do a new test script in git.git/t
> and if it fails on binary files, try to fix it today.
apply.c | 11 ++++---
t/t4103-apply-binary.sh | 78 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 85 insertions(+), 4 deletions(-)
create mode 100644 t/t4103-apply-binary.sh
applies-to: 4dda103301d7b70ec6e6e361d4a8d2cac24eccb4
92927ed0aac56a86f85049215791fcd106af4b62
diff --git a/apply.c b/apply.c
index 590adc6..a002e15 100644
--- a/apply.c
+++ b/apply.c
@@ -891,7 +891,7 @@ static int parse_chunk(char *buffer, uns
patchsize = parse_single_patch(buffer + offset + hdrsize, size - offset - hdrsize, patch);
- if (!patchsize && !metadata_changes(patch)) {
+ if (!patchsize) {
static const char binhdr[] = "Binary files ";
if (sizeof(binhdr) - 1 < size - offset - hdrsize &&
@@ -899,9 +899,12 @@ static int parse_chunk(char *buffer, uns
sizeof(binhdr)-1))
patch->is_binary = 1;
- if (patch->is_binary && !apply && !check)
- ;
- else
+ /* Empty patch cannot be applied if:
+ * - it is a binary patch or
+ * - metadata does not change and is not a binary patch.
+ */
+ if ((apply || check) &&
+ (patch->is_binary || !metadata_changes(patch)))
die("patch with only garbage at line %d", linenr);
}
diff --git a/t/t4103-apply-binary.sh b/t/t4103-apply-binary.sh
new file mode 100644
index 0000000..948d5b5
--- /dev/null
+++ b/t/t4103-apply-binary.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+#
+# Copyright (c) 2005 Junio C Hamano
+#
+
+test_description='git-apply handling binary patches
+
+'
+. ./test-lib.sh
+
+# setup
+
+cat >file1 <<EOF
+A quick brown fox jumps over the lazy dog.
+A tiny little penguin runs around in circles.
+There is a flag with Linux written on it.
+A slow black-and-white panda just sits there,
+munching on his bamboo.
+EOF
+cat file1 >file2
+cat file1 >file4
+
+git-update-index --add --remove file1 file2 file4
+git-commit -m 'Initial Version' 2>/dev/null
+
+git-checkout -b binary
+tr 'x' '\0' <file1 >file3
+cat file3 >file4
+git-add file2
+tr '\0' 'v' <file3 >file1
+rm -f file2
+git-update-index --add --remove file1 file2 file3 file4
+git-commit -m 'Second Version'
+
+git-diff-tree -p master binary >B.diff
+git-diff-tree -p -C master binary >C.diff
+
+test_expect_success 'stat binary diff -- should not fail.' \
+ 'git-checkout master
+ git-apply --stat --summary B.diff'
+
+test_expect_success 'stat binary diff (copy) -- should not fail.' \
+ 'git-checkout master
+ git-apply --stat --summary C.diff'
+
+test_expect_failure 'check binary diff -- should fail.' \
+ 'git-checkout master
+ git-apply --check B.diff'
+
+test_expect_failure 'check binary diff (copy) -- should fail.' \
+ 'git-checkout master
+ git-apply --check C.diff'
+
+# Now we start applying them.
+
+test_expect_failure 'apply binary diff -- should fail.' \
+ 'git-checkout master
+ git-apply B.diff'
+
+git-reset --hard
+
+test_expect_failure 'apply binary diff -- should fail.' \
+ 'git-checkout master
+ git-apply --index B.diff'
+
+git-reset --hard
+
+test_expect_failure 'apply binary diff (copy) -- should fail.' \
+ 'git-checkout master
+ git-apply C.diff'
+
+git-reset --hard
+
+test_expect_failure 'apply binary diff (copy) -- should fail.' \
+ 'git-checkout master
+ git-apply --index C.diff'
+
+test_done
---
0.99.9.GIT
^ permalink raw reply related [flat|nested] 35+ messages in thread
* master has some toys
2005-11-16 18:30 ` Junio C Hamano
2005-11-16 22:15 ` [PATCH] git-apply: fail if a patch cannot be applied Junio C Hamano
@ 2005-11-17 1:21 ` Junio C Hamano
2005-11-17 8:29 ` Alex Riesen
1 sibling, 1 reply; 35+ messages in thread
From: Junio C Hamano @ 2005-11-17 1:21 UTC (permalink / raw)
To: git
Junio C Hamano <junkio@cox.net> writes:
> Incidentally, for the last couple of days, I was working on
> adding a very limited binary file diff support to "diff piped to
> apply" pattern, and the result has been posted as "reworked
> rebase" patches. It is very limited in the sense that the diff
> output does not attempt to be useful if the patch consumer does
> not have both pre- and post-image blob, but for the use of
> StGIT's internal patch replaying purposes that is not a concern,
> so you might be interested in taking a look.
Along with the git wrapper fixes and git-apply bugfix (it did
not fail when it saw unapplicable binary patches), and
cvsexportcommit fixes from Kevin Geiss, I have the "limited
binary patch support" on the master branch. The reworked rebase
is still in proposed updates branch.
I'll be offline for a couple of hours chaffering my wife.
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 1:21 ` master has some toys Junio C Hamano
@ 2005-11-17 8:29 ` Alex Riesen
2005-11-17 10:12 ` Junio C Hamano
2005-11-17 11:08 ` Johannes Schindelin
0 siblings, 2 replies; 35+ messages in thread
From: Alex Riesen @ 2005-11-17 8:29 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On 11/17/05, Junio C Hamano <junkio@cox.net> wrote:
> Along with the git wrapper fixes and git-apply bugfix (it did
cygwin is completely broken. Still debugging, but it looks like the
old "windows can't unlink/rename open files" problem.
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 8:29 ` Alex Riesen
@ 2005-11-17 10:12 ` Junio C Hamano
2005-11-17 10:36 ` Alex Riesen
2005-11-17 11:08 ` Johannes Schindelin
1 sibling, 1 reply; 35+ messages in thread
From: Junio C Hamano @ 2005-11-17 10:12 UTC (permalink / raw)
To: Alex Riesen; +Cc: git
Alex Riesen <raa.lkml@gmail.com> writes:
> cygwin is completely broken. Still debugging, but it looks like the
> old "windows can't unlink/rename open files" problem.
Ouch. Sorry, and thanks for reporting.
Ideally I should get a cygwin environment myself, but for that
first I need to procure Windows box. Or does cygwin run on
Wine, and if so is cygwin running on Wine a good enough
approximation of the real thing?
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 10:12 ` Junio C Hamano
@ 2005-11-17 10:36 ` Alex Riesen
2005-11-17 11:03 ` Junio C Hamano
2005-11-17 11:22 ` Johannes Schindelin
0 siblings, 2 replies; 35+ messages in thread
From: Alex Riesen @ 2005-11-17 10:36 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
On 11/17/05, Junio C Hamano <junkio@cox.net> wrote:
> > cygwin is completely broken. Still debugging, but it looks like the
> > old "windows can't unlink/rename open files" problem.
>
> Ouch. Sorry, and thanks for reporting.
As it turned out, not the git.c is guilty, but the missing
NO_MMAP=YesPlease in Cygwin section. I had it for a long time and
accidentally removed by the recent pull. BTW, I couldn't find nowhere
on original branch. Was it never submitted?
> Ideally I should get a cygwin environment myself, but for that
> first I need to procure Windows box. Or does cygwin run on
> Wine, and if so is cygwin running on Wine a good enough
> approximation of the real thing?
I don't know. One should try real hard to create as much junk as there is.
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 10:36 ` Alex Riesen
@ 2005-11-17 11:03 ` Junio C Hamano
2005-11-18 1:23 ` John Benes
2005-11-17 11:22 ` Johannes Schindelin
1 sibling, 1 reply; 35+ messages in thread
From: Junio C Hamano @ 2005-11-17 11:03 UTC (permalink / raw)
To: Alex Riesen; +Cc: git
Alex Riesen <raa.lkml@gmail.com> writes:
> As it turned out, not the git.c is guilty, but the missing
> NO_MMAP=YesPlease in Cygwin section. I had it for a long time and
> accidentally removed by the recent pull. BTW, I couldn't find nowhere
> on original branch. Was it never submitted?
Neither 'git-whatchanged Makefile' nor 'git-whatchanged
-SNO_MMAP Makefile' reports such on my end. Do we need one?
Johannes said he tests on Cygwin as well, and I am sure there
are others with Cygin on the list. Help us out here please?
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 8:29 ` Alex Riesen
2005-11-17 10:12 ` Junio C Hamano
@ 2005-11-17 11:08 ` Johannes Schindelin
2005-11-17 11:16 ` Junio C Hamano
2005-11-17 11:20 ` Alex Riesen
1 sibling, 2 replies; 35+ messages in thread
From: Johannes Schindelin @ 2005-11-17 11:08 UTC (permalink / raw)
To: Alex Riesen; +Cc: Junio C Hamano, git
Hi,
On Thu, 17 Nov 2005, Alex Riesen wrote:
> On 11/17/05, Junio C Hamano <junkio@cox.net> wrote:
> > Along with the git wrapper fixes and git-apply bugfix (it did
>
> cygwin is completely broken. Still debugging, but it looks like the
> old "windows can't unlink/rename open files" problem.
FWIW I had no problems on cygwin (NO_MMAP=YesPlease).
Ciao,
Dscho
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 11:08 ` Johannes Schindelin
@ 2005-11-17 11:16 ` Junio C Hamano
2005-11-17 11:21 ` Alex Riesen
2005-11-17 11:51 ` Johannes Schindelin
2005-11-17 11:20 ` Alex Riesen
1 sibling, 2 replies; 35+ messages in thread
From: Junio C Hamano @ 2005-11-17 11:16 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Alex Riesen, git
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> Hi,
>
> On Thu, 17 Nov 2005, Alex Riesen wrote:
>
>> On 11/17/05, Junio C Hamano <junkio@cox.net> wrote:
>> > Along with the git wrapper fixes and git-apply bugfix (it did
>>
>> cygwin is completely broken. Still debugging, but it looks like the
>> old "windows can't unlink/rename open files" problem.
>
> FWIW I had no problems on cygwin (NO_MMAP=YesPlease).
It appears we'd better have something like this in the main
Makefile, so people do not have to do it themselves everywhere?
---
diff --git a/Makefile b/Makefile
index 7ce62e8..93d51c6 100644
--- a/Makefile
+++ b/Makefile
@@ -213,6 +213,7 @@ endif
ifeq ($(uname_O),Cygwin)
NO_STRCASESTR = YesPlease
NEEDS_LIBICONV = YesPlease
+ NO_MMAP = YesPlease
NO_IPV6 = YesPlease
X = .exe
endif
^ permalink raw reply related [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 11:08 ` Johannes Schindelin
2005-11-17 11:16 ` Junio C Hamano
@ 2005-11-17 11:20 ` Alex Riesen
1 sibling, 0 replies; 35+ messages in thread
From: Alex Riesen @ 2005-11-17 11:20 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Junio C Hamano, git
[-- Attachment #1: Type: text/plain, Size: 408 bytes --]
On 11/17/05, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> > > Along with the git wrapper fixes and git-apply bugfix (it did
> >
> > cygwin is completely broken. Still debugging, but it looks like the
> > old "windows can't unlink/rename open files" problem.
>
> FWIW I had no problems on cygwin (NO_MMAP=YesPlease).
>
yes, that's what I had, too. Junio, how about the attached patch?
[-- Attachment #2: cygwin-has-no-mmap.patch --]
[-- Type: application/xxxxx, Size: 294 bytes --]
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 11:16 ` Junio C Hamano
@ 2005-11-17 11:21 ` Alex Riesen
2005-11-17 11:51 ` Johannes Schindelin
1 sibling, 0 replies; 35+ messages in thread
From: Alex Riesen @ 2005-11-17 11:21 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Johannes Schindelin, git
On 11/17/05, Junio C Hamano <junkio@cox.net> wrote:
> >> > Along with the git wrapper fixes and git-apply bugfix (it did
> >>
> >> cygwin is completely broken. Still debugging, but it looks like the
> >> old "windows can't unlink/rename open files" problem.
> >
> > FWIW I had no problems on cygwin (NO_MMAP=YesPlease).
>
> It appears we'd better have something like this in the main
> Makefile, so people do not have to do it themselves everywhere?
damn... Missed by 4 minutes... :)
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 10:36 ` Alex Riesen
2005-11-17 11:03 ` Junio C Hamano
@ 2005-11-17 11:22 ` Johannes Schindelin
1 sibling, 0 replies; 35+ messages in thread
From: Johannes Schindelin @ 2005-11-17 11:22 UTC (permalink / raw)
To: Alex Riesen; +Cc: Junio C Hamano, git
Hi,
On Thu, 17 Nov 2005, Alex Riesen wrote:
> As it turned out, not the git.c is guilty, but the missing
> NO_MMAP=YesPlease in Cygwin section. I had it for a long time and
> accidentally removed by the recent pull. BTW, I couldn't find nowhere
> on original branch. Was it never submitted?
It was not, because someone (Peter?) had success without NO_MMAP=YesPlease
on cygwin. So it was decided to keep NO_MMAP an option which has to be
provided by the user.
> > Ideally I should get a cygwin environment myself, but for that
> > first I need to procure Windows box. Or does cygwin run on
> > Wine, and if so is cygwin running on Wine a good enough
> > approximation of the real thing?
It does not. The problem with mmap is a problem which stems from working
around Windows not being POSIX. Also note that the problem goes poof in a
gdb session. I tend to think it is a timing problem in conjunction with
the (very conservative) Antivirus setting.
Ciao,
Dscho
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 11:16 ` Junio C Hamano
2005-11-17 11:21 ` Alex Riesen
@ 2005-11-17 11:51 ` Johannes Schindelin
2005-11-17 12:40 ` Alex Riesen
` (2 more replies)
1 sibling, 3 replies; 35+ messages in thread
From: Johannes Schindelin @ 2005-11-17 11:51 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Alex Riesen, git
Hi,
On Thu, 17 Nov 2005, Junio C Hamano wrote:
> It appears we'd better have something like this in the main
> Makefile, so people do not have to do it themselves everywhere?
I'd like to wait to have a reaction from other people. I vividly remember
my eyes falling out of my sockets when somebody reported success on cygwin
without NO_MMAP. If there is *any* cygwin version which fixes it, we
should rather make people upgrade, no?
Ciao,
Dscho
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 11:51 ` Johannes Schindelin
@ 2005-11-17 12:40 ` Alex Riesen
2005-11-17 19:29 ` Junio C Hamano
2005-11-18 12:01 ` timo
2 siblings, 0 replies; 35+ messages in thread
From: Alex Riesen @ 2005-11-17 12:40 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Junio C Hamano, git
On 11/17/05, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> > It appears we'd better have something like this in the main
> > Makefile, so people do not have to do it themselves everywhere?
>
> I'd like to wait to have a reaction from other people. I vividly remember
> my eyes falling out of my sockets when somebody reported success on cygwin
> without NO_MMAP. If there is *any* cygwin version which fixes it, we
> should rather make people upgrade, no?
my eyes too. I used to compile Peters tree, and it never worked (w2k,
antivirus present, but self-disabled because of some lucky crash).
That is why the whole story started (and I started to look for
unclosed files and unmapped maps).
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 11:51 ` Johannes Schindelin
2005-11-17 12:40 ` Alex Riesen
@ 2005-11-17 19:29 ` Junio C Hamano
2005-11-17 23:36 ` Johannes Schindelin
2005-11-18 20:09 ` Junio C Hamano
2005-11-18 12:01 ` timo
2 siblings, 2 replies; 35+ messages in thread
From: Junio C Hamano @ 2005-11-17 19:29 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: git
Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> I'd like to wait to have a reaction from other people. I vividly remember
> my eyes falling out of my sockets when somebody reported success on cygwin
> without NO_MMAP. If there is *any* cygwin version which fixes it, we
> should rather make people upgrade, no?
I am not so sure about forcing people upgrade, but we may end up
deciding it is better not to have NO_MMAP as the default. If
that turns out to be the case, I'd prefer to have something like
this instead:
diff --git a/Makefile b/Makefile
index 7ce62e8..215abf0 100644
--- a/Makefile
+++ b/Makefile
@@ -213,6 +213,10 @@ endif
ifeq ($(uname_O),Cygwin)
NO_STRCASESTR = YesPlease
NEEDS_LIBICONV = YesPlease
+ # There are conflicting reports about this.
+ # On some boxes NO_MMAP is needed, and not so elsewhere.
+ # Try uncommenting this if you see things break -- YMMV.
+ # NO_MMAP = YesPlease
NO_IPV6 = YesPlease
X = .exe
endif
^ permalink raw reply related [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 19:29 ` Junio C Hamano
@ 2005-11-17 23:36 ` Johannes Schindelin
2005-11-18 20:09 ` Junio C Hamano
1 sibling, 0 replies; 35+ messages in thread
From: Johannes Schindelin @ 2005-11-17 23:36 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
Hi,
On Thu, 17 Nov 2005, Junio C Hamano wrote:
> + # There are conflicting reports about this.
> + # On some boxes NO_MMAP is needed, and not so elsewhere.
> + # Try uncommenting this if you see things break -- YMMV.
> + # NO_MMAP = YesPlease
Sounds sensible. Maybe you want to output that to stderr or stdout?
Ciao,
Dscho
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 11:03 ` Junio C Hamano
@ 2005-11-18 1:23 ` John Benes
2005-11-18 2:48 ` Johannes Schindelin
2005-11-18 3:36 ` Junio C Hamano
0 siblings, 2 replies; 35+ messages in thread
From: John Benes @ 2005-11-18 1:23 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Junio C Hamano wrote:
> Alex Riesen <raa.lkml@gmail.com> writes:
>
>> As it turned out, not the git.c is guilty, but the missing
>> NO_MMAP=YesPlease in Cygwin section. I had it for a long time and
>> accidentally removed by the recent pull. BTW, I couldn't find nowhere
>> on original branch. Was it never submitted?
>
> Neither 'git-whatchanged Makefile' nor 'git-whatchanged
> -SNO_MMAP Makefile' reports such on my end. Do we need one?
The patch with the commented out option seems like it would work...
> Johannes said he tests on Cygwin as well, and I am sure there
> are others with Cygin on the list. Help us out here please?
I was able to compile master and pu on Cygwin without NO_MMAP=YesPlease
in the Cygwin section. However, the make test failed on the
binary-apply on both master and pu, output follows.
Commit ID's used for testing:
refs/heads/master 4e1da85d7d0480b6d9973317da4f7a5aa603fcb5
refs/heads/pu 3b4587eb3c549649af7e84659b4808003c34c2d3
make test barfing on master:
*** t4103-apply-binary.sh ***
* ok 1: stat binary diff -- should not fail.
* ok 2: stat binary diff (copy) -- should not fail.
* ok 3: check binary diff -- should fail.
* ok 4: check binary diff (copy) -- should fail.
* ok 5: check incomplete binary diff with replacement -- should fail.
* ok 6: check incomplete binary diff with replacement (copy) -- should
fail.
* FAIL 7: check binary diff with replacement.
git-checkout master
git-apply --check --allow-binary-replacement BF.diff
* FAIL 8: check binary diff with replacement (copy).
git-checkout master
git-apply --check --allow-binary-replacement CF.diff
* ok 9: apply binary diff -- should fail.
* ok 10: apply binary diff -- should fail.
* ok 11: apply binary diff (copy) -- should fail.
* ok 12: apply binary diff (copy) -- should fail.
* ok 13: apply binary diff without replacement -- should fail.
* ok 14: apply binary diff without replacement (copy) -- should fail.
* FAIL 15: apply binary diff.
do_reset
git-apply --allow-binary-replacement --index BF.diff &&
test -z "$(git-diff --name-status binary)"
* FAIL 16: apply binary diff (copy).
do_reset
git-apply --allow-binary-replacement --index CF.diff &&
test -z "$(git-diff --name-status binary)"
* failed 4 among 16 test(s)
make[1]: *** [t4103-apply-binary.sh] Error 1
make test barfing on pu:
*** t4103-apply-binary.sh ***
usage: git-diff-tree [--stdin] [-m] [-s] [-v] [--pretty] [-t] [-r]
[--root] [<co
mmon diff options>] <tree-ish> [<tree-ish>] [<path>...]
***SNIP***
usage: git-diff-tree [--stdin] [-m] [-s] [-v] [--pretty] [-t] [-r]
[--root] [<co
mmon diff options>] <tree-ish> [<tree-ish>] [<path>...]
***SNIP***
* FAIL 1: stat binary diff -- should not fail.
git-checkout master
git-apply --stat --summary B.diff
* FAIL 2: stat binary diff (copy) -- should not fail.
git-checkout master
git-apply --stat --summary C.diff
* ok 3: check binary diff -- should fail.
* ok 4: check binary diff (copy) -- should fail.
* ok 5: check incomplete binary diff with replacement -- should fail.
* ok 6: check incomplete binary diff with replacement (copy) -- should
fail.
* FAIL 7: check binary diff with replacement.
git-checkout master
git-apply --check --allow-binary-replacement BF.diff
* FAIL 8: check binary diff with replacement (copy).
git-checkout master
git-apply --check --allow-binary-replacement CF.diff
* ok 9: apply binary diff -- should fail.
* ok 10: apply binary diff -- should fail.
* ok 11: apply binary diff (copy) -- should fail.
* ok 12: apply binary diff (copy) -- should fail.
* ok 13: apply binary diff without replacement -- should fail.
* ok 14: apply binary diff without replacement (copy) -- should fail.
* FAIL 15: apply binary diff.
do_reset
git-apply --allow-binary-replacement --index BF.diff &&
test -z "$(git-diff --name-status binary)"
* FAIL 16: apply binary diff (copy).
do_reset
git-apply --allow-binary-replacement --index CF.diff &&
test -z "$(git-diff --name-status binary)"
* failed 6 among 16 test(s)
make[1]: *** [t4103-apply-binary.sh] Error 1
- --
John Benes
GPG Fingerprint: D519 25DB BB5C 38FC 9D02 02E7 596D BC50 F880 27FA
"It is not only the living who are killed in war." - Isaac Asimov
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iQIVAwUBQ30tE2F0oWcU9kCNAQKzRQ/8DEoZTRYDcU80mzddq8AS8ClctLx8CorY
OJYY/sTAivjot7R/bPUj97Ie+FaUKC0mpTOGZTT8KkSpRg2mbZ6YlTUoHAtf4iq3
F9vQs2qVJqyUJqbXcP+X68huIZF7vHZI47e9ExTO1RrxZCGxDp8JigfhmlS4CN4K
Dee1NSMnoWGklNEXvZMwkvhLerV+9Xs6UTGZ5AeRHRiHiLqK+I9eDNaULABHwAYO
JSsat0HDjKMKrgNNFo43TpRTm17gq7N83LOJJkxiNYnRPh8nGpIOgfNx8riWP5DB
tMw3FWvA9bv3tllvTFC4wx92Rgfs255cvXEunqfRTsMzGG7rhdg4UY92I0yB8k6b
g6nucu93VtwEkHZ1b9ZTBwz85ZuTImS/72pHbRPvOaeSuDArBI9i+Lwrb+z+0vUS
iMMuAxtWhKUFr87A6ljdu27IfE+pJaEgGEySGkquU3EexuNRMz62raveRsEpLSu8
iqbKoMeC1A7CtcbV3OBdktfFyM3rR8/G9OpjBNdkojo08BOvsoMCU45jLdXFIFtu
MGMajhGEu8EwAdItq6Qq0fXOfU6ph5oN4tg1pKt83QDkDFJyEJzOH1CMLh+qxXR3
m25wLSJcV8YbNfQVMumw2aFXn3ojwkP3kEheoTKexTFVkwGS0dU/j9kpQ8wj9Pqv
1ttxTdlX2HM=
=OthK
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-18 1:23 ` John Benes
@ 2005-11-18 2:48 ` Johannes Schindelin
2005-11-18 4:01 ` John Benes
2005-11-18 3:36 ` Junio C Hamano
1 sibling, 1 reply; 35+ messages in thread
From: Johannes Schindelin @ 2005-11-18 2:48 UTC (permalink / raw)
To: John Benes; +Cc: Junio C Hamano, git
Hi,
On Thu, 17 Nov 2005, John Benes wrote:
> I was able to compile master and pu on Cygwin without NO_MMAP=YesPlease
> in the Cygwin section. However, the make test failed on the
> binary-apply on both master and pu, output follows.
Nobody doubts that you can *compile* it. The problem is the fixing of the
mmap()ed regions after fork(). Since win32 is such a sane system, it does
not provide mmap() or fork() out of the box. And under some very obscure
circumstances, cygwin's emulation of mmap() and fork() fails.
BTW, it would be more helpful if you do not just tell *what* test fails,
but *how*. For example, try to run "git-whatchanged -p" and send just
the first page of the output (both stdout and stderr). I bet it says it
has a problem fixing up mmap() after fork().
Hth,
Dscho
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-18 1:23 ` John Benes
2005-11-18 2:48 ` Johannes Schindelin
@ 2005-11-18 3:36 ` Junio C Hamano
2005-11-18 3:49 ` A Large Angry SCM
2005-11-18 4:01 ` master has some toys John Benes
1 sibling, 2 replies; 35+ messages in thread
From: Junio C Hamano @ 2005-11-18 3:36 UTC (permalink / raw)
To: John Benes; +Cc: git
John Benes <smartcat99s@gmail.com> writes:
> Junio C Hamano wrote:
>
> I was able to compile master and pu on Cygwin without NO_MMAP=YesPlease
> in the Cygwin section. However, the make test failed on the
> binary-apply on both master and pu, output follows.
>
> Commit ID's used for testing:
> refs/heads/master 4e1da85d7d0480b6d9973317da4f7a5aa603fcb5
> refs/heads/pu 3b4587eb3c549649af7e84659b4808003c34c2d3
Thanks. But the test result look suspicious for pu.
$ git-ls-tree 3b4587eb t | grep t4103
outputs empty, so what you tested does not seem to be that
commit.
Anyway, the master is more important at this point.
> make test barfing on master:
> *** t4103-apply-binary.sh ***
> * FAIL 7: check binary diff with replacement.
> git-checkout master
> git-apply --check --allow-binary-replacement BF.diff
> * FAIL 8: check binary diff with replacement (copy).
> git-checkout master
> git-apply --check --allow-binary-replacement CF.diff
> * FAIL 15: apply binary diff.
> do_reset
> git-apply --allow-binary-replacement --index BF.diff &&
> test -z "$(git-diff --name-status binary)"
> * FAIL 16: apply binary diff (copy).
> do_reset
> git-apply --allow-binary-replacement --index CF.diff &&
> test -z "$(git-diff --name-status binary)"
> * failed 4 among 16 test(s)
> make[1]: *** [t4103-apply-binary.sh] Error 1
So it fails on these binary diffs with full index tests. Could
you try running it like this?
$ cd t
$ sh ./t4103-apply-binary.sh -i -v
If all things being equal, this will stop at the first failing
test "* FAIL 7: ", and you will have trash/ directory under t/.
$ cd trash
$ ls -l
I would first want to see if it was diff that failed or the
apply. What does BF.diff contain?
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-18 3:36 ` Junio C Hamano
@ 2005-11-18 3:49 ` A Large Angry SCM
2005-11-18 4:26 ` Junio C Hamano
2005-11-18 4:01 ` master has some toys John Benes
1 sibling, 1 reply; 35+ messages in thread
From: A Large Angry SCM @ 2005-11-18 3:49 UTC (permalink / raw)
To: Junio C Hamano; +Cc: John Benes, git
Junio C Hamano wrote:
> John Benes <smartcat99s@gmail.com> writes:
>
>>Junio C Hamano wrote:
>>
>>I was able to compile master and pu on Cygwin without NO_MMAP=YesPlease
>>in the Cygwin section. However, the make test failed on the
>>binary-apply on both master and pu, output follows.
>>
>>Commit ID's used for testing:
>>refs/heads/master 4e1da85d7d0480b6d9973317da4f7a5aa603fcb5
>>refs/heads/pu 3b4587eb3c549649af7e84659b4808003c34c2d3
>
> Thanks. But the test result look suspicious for pu.
>
> $ git-ls-tree 3b4587eb t | grep t4103
>
> outputs empty, so what you tested does not seem to be that
> commit.
>
> Anyway, the master is more important at this point.
>
>>make test barfing on master:
>>*** t4103-apply-binary.sh ***
>>* FAIL 7: check binary diff with replacement.
>> git-checkout master
>> git-apply --check --allow-binary-replacement BF.diff
>>* FAIL 8: check binary diff with replacement (copy).
>> git-checkout master
>> git-apply --check --allow-binary-replacement CF.diff
>>* FAIL 15: apply binary diff.
>> do_reset
>> git-apply --allow-binary-replacement --index BF.diff &&
>> test -z "$(git-diff --name-status binary)"
>>* FAIL 16: apply binary diff (copy).
>> do_reset
>> git-apply --allow-binary-replacement --index CF.diff &&
>> test -z "$(git-diff --name-status binary)"
>>* failed 4 among 16 test(s)
>>make[1]: *** [t4103-apply-binary.sh] Error 1
>
> So it fails on these binary diffs with full index tests. Could
> you try running it like this?
>
> $ cd t
> $ sh ./t4103-apply-binary.sh -i -v
>
> If all things being equal, this will stop at the first failing
> test "* FAIL 7: ", and you will have trash/ directory under t/.
>
> $ cd trash
> $ ls -l
>
> I would first want to see if it was diff that failed or the
> apply. What does BF.diff contain?
>
OK, here's what I get:
> sh ./t4103-apply-binary.sh -i -v
* expecting success: git-checkout master
git-apply --stat --summary B.diff
file1 | 4 ++--
file2 | 5 -----
file3 | 0
file4 | 0
4 files changed, 2 insertions(+), 7 deletions(-)
delete mode 100644 file2
create mode 100644 file3
* ok 1: stat binary diff -- should not fail.
* expecting success: git-checkout master
git-apply --stat --summary C.diff
file1 | 4 ++--
file2 | 5 -----
file3 | 0
file4 | 0
4 files changed, 2 insertions(+), 7 deletions(-)
delete mode 100644 file2
copy file1 => file3 (70%)
* ok 2: stat binary diff (copy) -- should not fail.
* expecting failure: git-checkout master
git-apply --check B.diff
fatal: patch with only garbage at line 30
* ok 3: check binary diff -- should fail.
* expecting failure: git-checkout master
git-apply --check C.diff
fatal: patch with only garbage at line 32
* ok 4: check binary diff (copy) -- should fail.
* expecting failure: git-checkout master
git-apply --check --allow-binary-replacement B.diff
fatal: patch with only garbage at line 30
* ok 5: check incomplete binary diff with replacement -- should fail.
* expecting failure: git-checkout master
git-apply --check --allow-binary-replacement C.diff
fatal: patch with only garbage at line 32
* ok 6: check incomplete binary diff with replacement (copy) -- should
fail.
* expecting success: git-checkout master
git-apply --check --allow-binary-replacement BF.diff
fatal: patch with only garbage at line 30
* FAIL 7: check binary diff with replacement.
git-checkout master
git-apply --check --allow-binary-replacement BF.diff
> cd trash
internet@Gojira:~/GIT/git/t/trash> ls -l
total 28
-rw-r--r-- 1 internet internet 909 2005-11-17 19:47 B.diff
-rw-r--r-- 1 internet internet 1173 2005-11-17 19:47 BF.diff
-rw-r--r-- 1 internet internet 944 2005-11-17 19:47 C.diff
-rw-r--r-- 1 internet internet 1208 2005-11-17 19:47 CF.diff
-rw-r--r-- 1 internet internet 201 2005-11-17 19:47 file1
-rw-r--r-- 1 internet internet 201 2005-11-17 19:47 file2
-rw-r--r-- 1 internet internet 201 2005-11-17 19:47 file4
> cat BF.diff
diff --git a/file1 b/file1
index
edc575dec543a684da5007b43886ee32ecb381ae..af1eedd35be991f3ced320f7d927799c72cd8435
100644
--- a/file1
+++ b/file1
@@ -1,5 +1,5 @@
-A quick brown fox jumps over the lazy dog.
+A quick brown fov jumps over the lazy dog.
A tiny little penguin runs around in circles.
-There is a flag with Linux written on it.
+There is a flag with Linuv written on it.
A slow black-and-white panda just sits there,
munching on his bamboo.
diff --git a/file2 b/file2
deleted file mode 100644
index
edc575dec543a684da5007b43886ee32ecb381ae..0000000000000000000000000000000000000000
--- a/file2
+++ /dev/null
@@ -1,5 +0,0 @@
-A quick brown fox jumps over the lazy dog.
-A tiny little penguin runs around in circles.
-There is a flag with Linux written on it.
-A slow black-and-white panda just sits there,
-munching on his bamboo.
diff --git a/file3 b/file3
new file mode 100644
index
0000000000000000000000000000000000000000..adb07b7ad3fa2c63251b06d1d39cb90a85b860b4
Files /dev/null and b/file3 differ
diff --git a/file4 b/file4
index
edc575dec543a684da5007b43886ee32ecb381ae..adb07b7ad3fa2c63251b06d1d39cb90a85b860b4
100644
Files a/file4 and b/file4 differ
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-18 2:48 ` Johannes Schindelin
@ 2005-11-18 4:01 ` John Benes
0 siblings, 0 replies; 35+ messages in thread
From: John Benes @ 2005-11-18 4:01 UTC (permalink / raw)
To: Johannes Schindelin, git
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Johannes Schindelin wrote:
> BTW, it would be more helpful if you do not just tell *what* test fails,
> but *how*. For example, try to run "git-whatchanged -p" and send just
> the first page of the output (both stdout and stderr). I bet it says it
> has a problem fixing up mmap() after fork().
I ran "git-whatchanged -p" with the previously mentioned master build
installed in /usr/bin. Below is a copy of the command session.
Stdout was redirected to test2.txt, which is located at:
http://www.penguinlounge.1and2.org/videos/test2.txt.bz2
Twinkie@squirrel ~/git
$ git-whatchanged -p > ../test2.txt
Twinkie@squirrel ~/git
$ cd ..
Twinkie@squirrel ~
$ ls -la test2.txt
- -rw-r--r-- 1 Twinkie None 9338905 Nov 17 21:23 test2.txt
nothing was displayed on stderr.
The make test error was shown on linux too. [1]
It reports as:
Twinkie@squirrel ~/git/t/trash
$ git-apply --check --allow-binary-replacement BF.diff
fatal: patch with only garbage at line 30
could it be an outdated diff? (2.8.7)
[1] Re: "make test" fails with current HEAD @ 9:23PM CST by A Large
Angry SCM
Anything else you want me to bash this Cygwin install against?
- --
John Benes
GPG Fingerprint: D519 25DB BB5C 38FC 9D02 02E7 596D BC50 F880 27FA
"It is not only the living who are killed in war." - Isaac Asimov
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iQIVAwUBQ31SF2F0oWcU9kCNAQKLUxAAtqOpSCsGSnNz+q9x8gzqaqjCK+mjjUkJ
YJFalTEeNO9/alp3mPGb4kXwhMahyugGqHZzr2Lp5JC0gDSsn5vqF2sxYtB9yvAg
1lg33awy5AI1LkIcbeiCvjkBI83UvIjOYLEs1YcIXKRDYJkcbo6yBN4uqkDZKAoS
O8L3q2r2/mCJQYlANy1ruhT0Al5xPwTFNv6JqIkm8PWsPE+es6ZwyFBXKi62CHu5
AWsc2nHDhPIx5YS1h7CIIQjiRh2qkf807IvXKZtY++o7yoHn49Rtu87VblZhkuH5
UHOSE0gDbT37MbIg6hoZc20kBZIq1s+6e+/FhrFAUrmnny9t7fPaU35gJmPPA63W
KajRKOwChmO6V5scTfgimxxzN4Jlnd+AM8FdxTWCfz6s4FLnnzukwX5T4PbWw6Kg
if8fekhKkPYCLQtAa8Q6Xe5GIZJ5ghVRfAnZWhc4p8OJj6gacwGCk/QX0Rxu6z3r
BF9e7RCyytwDw2Lw87NJFc7AYp4V4uINOAMMxPK0eidHOkkVVzu3eaoB8OIVzh5Q
oAwo+gPpd/PgFldJJu4i9e8bD8/J7cwZ0vpMkRDig9P1ZqFCj9t2+bAVzOgJPb80
4YG/UR4VwVuKyYDeLhCHNLYJBssNXCCkN4+UKuLcNsk6+pXzniPVAc2Wda5BMIj2
LV5oMRUCpKQ=
=NFuc
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-18 3:36 ` Junio C Hamano
2005-11-18 3:49 ` A Large Angry SCM
@ 2005-11-18 4:01 ` John Benes
2005-11-18 4:27 ` Junio C Hamano
1 sibling, 1 reply; 35+ messages in thread
From: John Benes @ 2005-11-18 4:01 UTC (permalink / raw)
To: Junio C Hamano, git
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Junio C Hamano wrote:
> John Benes <smartcat99s AT gmail DOT com> writes:
>> Commit ID's used for testing:
>> refs/heads/master 4e1da85d7d0480b6d9973317da4f7a5aa603fcb5
>> refs/heads/pu 3b4587eb3c549649af7e84659b4808003c34c2d3
>
> Thanks. But the test result look suspicious for pu.
I verified that I was testing that commit, and the ls-tree results.
Must have been left over after switching from master...
> Anyway, the master is more important at this point.
> So it fails on these binary diffs with full index tests. Could
> you try running it like this?
>
> $ cd t
> $ sh ./t4103-apply-binary.sh -i -v
>
> If all things being equal, this will stop at the first failing
> test "* FAIL 7: ", and you will have trash/ directory under t/.
>
> $ cd trash
> $ ls -l
>
> I would first want to see if it was diff that failed or the
> apply. What does BF.diff contain?
>
Output from the commands requested:
Twinkie@squirrel ~/git/t
$ sh ./t4103-apply-binary.sh -i -v
sh ./t4103-apply-binary.sh -i -v
* expecting success: git-checkout master
git-apply --stat --summary B.diff
file1 | 4 ++--
file2 | 5 -----
file3 | 0
file4 | 0
4 files changed, 2 insertions(+), 7 deletions(-)
delete mode 100644 file2
create mode 100644 file3
* ok 1: stat binary diff -- should not fail.
* expecting success: git-checkout master
git-apply --stat --summary C.diff
file1 | 4 ++--
file2 | 5 -----
file3 | 0
file4 | 0
4 files changed, 2 insertions(+), 7 deletions(-)
delete mode 100644 file2
copy file1 => file3 (70%)
* ok 2: stat binary diff (copy) -- should not fail.
* expecting failure: git-checkout master
git-apply --check B.diff
fatal: patch with only garbage at line 30
* ok 3: check binary diff -- should fail.
* expecting failure: git-checkout master
git-apply --check C.diff
fatal: patch with only garbage at line 32
* ok 4: check binary diff (copy) -- should fail.
* expecting failure: git-checkout master
git-apply --check --allow-binary-replacement B.diff
fatal: patch with only garbage at line 30
* ok 5: check incomplete binary diff with replacement -- should fail.
* expecting failure: git-checkout master
git-apply --check --allow-binary-replacement C.diff
fatal: patch with only garbage at line 32
* ok 6: check incomplete binary diff with replacement (copy) -- should
fail.
* expecting success: git-checkout master
git-apply --check --allow-binary-replacement BF.diff
fatal: patch with only garbage at line 30
* FAIL 7: check binary diff with replacement.
git-checkout master
git-apply --check --allow-binary-replacement BF.diff
Twinkie@squirrel ~/git/t
$ cd trash
cd trash
Twinkie@squirrel ~/git/t/trash
$ ls -l
ls -l
total 19
- -rw-r--r-- 1 Twinkie None 909 Nov 17 21:49 B.diff
- -rw-r--r-- 1 Twinkie None 1173 Nov 17 21:49 BF.diff
- -rw-r--r-- 1 Twinkie None 944 Nov 17 21:49 C.diff
- -rw-r--r-- 1 Twinkie None 1208 Nov 17 21:49 CF.diff
- -rw-r--r-- 1 Twinkie None 201 Nov 17 21:49 file1
- -rw-r--r-- 1 Twinkie None 201 Nov 17 21:49 file2
- -rw-r--r-- 1 Twinkie None 201 Nov 17 21:49 file4
Twinkie@squirrel ~/git/t/trash
$ cat BF.diff
cat BF.diff
diff --git a/file1 b/file1
index
edc575dec543a684da5007b43886ee32ecb381ae..af1eedd35be991f3ced320f7d927799c
72cd8435 100644
- --- a/file1
+++ b/file1
@@ -1,5 +1,5 @@
- -A quick brown fox jumps over the lazy dog.
+A quick brown fov jumps over the lazy dog.
A tiny little penguin runs around in circles.
- -There is a flag with Linux written on it.
+There is a flag with Linuv written on it.
A slow black-and-white panda just sits there,
munching on his bamboo.
diff --git a/file2 b/file2
deleted file mode 100644
index
edc575dec543a684da5007b43886ee32ecb381ae..00000000000000000000000000000000
00000000
- --- a/file2
+++ /dev/null
@@ -1,5 +0,0 @@
- -A quick brown fox jumps over the lazy dog.
- -A tiny little penguin runs around in circles.
- -There is a flag with Linux written on it.
- -A slow black-and-white panda just sits there,
- -munching on his bamboo.
diff --git a/file3 b/file3
new file mode 100644
index
0000000000000000000000000000000000000000..adb07b7ad3fa2c63251b06d1d39cb90a
85b860b4
Files /dev/null and b/file3 differ
diff --git a/file4 b/file4
index
edc575dec543a684da5007b43886ee32ecb381ae..adb07b7ad3fa2c63251b06d1d39cb90a
85b860b4 100644
Files a/file4 and b/file4 differ
Twinkie@squirrel ~/git/t/trash
$ git-apply BF.diff
fatal: patch with only garbage at line 30
- --
John Benes
GPG Fingerprint: D519 25DB BB5C 38FC 9D02 02E7 596D BC50 F880 27FA
"It is not only the living who are killed in war." - Isaac Asimov
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iQIVAwUBQ31SGGF0oWcU9kCNAQJmchAA0L9fnTvMNwYhDHRVdPyF6XQYJJ7j3s6M
CtcjFvQZ0Zo2tp3ZZ8mqv9ANgPkV80HZFpWPwmlAouFQfNbjvEDlFxLejaKZ5TJj
q068iMk8ZmUUHKPUhONhCsi/toXHQuhA7RMWEwtE9EeugOOIC/++eI8qhKzBhJr3
REzLQN55lqrdhN/6ksrhJQU2VQ3AcAukgezrJy3j8CYOId3pVLYoyD75oxTrelnN
xSPritxM/zkdQZYwx/WeSFRivQQZgiSwm2nREJ5NY5MJ8X5SIZJ+bcHSnndNmUYv
e6YkZRPLXQBAyJpQHwmAQIqtYikPZ/Q6SNBoiQgA3Ws1SyzSaMcOo9R30Cg4LT4i
37EtQwjrGXzY6V/YlHbPqauPlUW6Sosc7fadNXHXkJJrdgyGSATZghh+XEZpNQ1G
2cS05y7/Xu9KnhL0GxbwLf9FZg14CndRh04NDtkdvwyE5rK9SCD5seW6HQOeBcuX
oHLPeA29IaZvHFUYTITXP5p2ZySAXrrFt7R532j6njeJvVCRzV7pPh7msHmAgdXL
Wz5Xv9ED43wz+q6JpXuWloYNyDKUUil2emXVA/MHwLW9ugfZmu9/OVo2ChXf+ZLH
8pSGxRmxTAVSf0GIiODPMWmGrm2zsKbNczCY1wATjiRaYvlmRk1kiXpXpubW5bw9
F1UDCLIFaJk=
=Uh0t
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-18 3:49 ` A Large Angry SCM
@ 2005-11-18 4:26 ` Junio C Hamano
2005-11-18 4:46 ` [PATCH] Deal with binary diff output from (unknown version of) diff Junio C Hamano
0 siblings, 1 reply; 35+ messages in thread
From: Junio C Hamano @ 2005-11-18 4:26 UTC (permalink / raw)
To: git
A Large Angry SCM <gitzilla@gmail.com> writes:
> Files /dev/null and b/file3 differ
> diff --git a/file4 b/file4
> index
> edc575dec543a684da5007b43886ee32ecb381ae..adb07b7ad3fa2c63251b06d1d39cb90a85b860b4
> 100644
> Files a/file4 and b/file4 differ
Thanks. I've seen enough. I expected diff (GNU diffutils 2.8.1
is what I have handy) output which says "Binary files a/foo and
b/foo differ".
Hmph. Now I'd need to find a way to catch at least these two
cases...
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-18 4:01 ` master has some toys John Benes
@ 2005-11-18 4:27 ` Junio C Hamano
2005-11-18 4:35 ` John Benes
2005-11-18 4:40 ` A Large Angry SCM
0 siblings, 2 replies; 35+ messages in thread
From: Junio C Hamano @ 2005-11-18 4:27 UTC (permalink / raw)
To: John Benes; +Cc: git
John Benes <smartcat99s@gmail.com> writes:
> diff --git a/file4 b/file4
> index
> edc575dec543a684da5007b43886ee32ecb381ae..adb07b7ad3fa2c63251b06d1d39cb90a
> 85b860b4 100644
> Files a/file4 and b/file4 differ
Thanks. This is the same problem as what Large Angly SCM
reports. What does your "diff --version" say?
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-18 4:27 ` Junio C Hamano
@ 2005-11-18 4:35 ` John Benes
2005-11-18 4:40 ` A Large Angry SCM
1 sibling, 0 replies; 35+ messages in thread
From: John Benes @ 2005-11-18 4:35 UTC (permalink / raw)
To: Junio C Hamano, git
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Junio C Hamano wrote:
> Thanks. This is the same problem as what Large Angly SCM
> reports. What does your "diff --version" say?
Twinkie@squirrel ~
$ diff --version
diff (GNU diffutils) 2.8.7
Written by Paul Eggert, Mike Haertel, David Hayes,
Richard Stallman, and Len Tower.
[snip 2004 copyright notice]
Extra useful info about my cygwin enviroment:
Twinkie@squirrel ~
$ cygcheck -V
cygcheck version 1.74
System Checker for Cygwin
Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Red Hat, Inc.
Compiled on Jul 2 2005
cygwin1.dll Version: 1.5.18
HTH!
- --
John Benes
GPG Fingerprint: D519 25DB BB5C 38FC 9D02 02E7 596D BC50 F880 27FA
"It is not only the living who are killed in war." - Isaac Asimov
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iQIVAwUBQ31aF2F0oWcU9kCNAQJrSRAAqDVQuCuF0PBn0ssGJA4sZ5fSa4S4hUju
yftaR9dDaWqpML4ieMcp5NXD1HEm6yzJbL9WhGuDQlpolo7ujbiI1sx7jP53Au+3
zm7iWojJVnRBirRAqsZpD2Ufriuzwnm6/rPJqe97RSkYIm29BcKsiSly67mFKEKJ
AL/MiAmH62h7HLOjSRR2o+3eGmvMlAesojoLdoTaCkic5l34WIfv4EzSSTSfwS+O
cn0K8MFqbuuApZTwECl5OdmAVbKGdC0PjgqgJQIEM39dWxKqqGrmSLvbs42AAEok
tOPTdB+4O2ECEIIYtjiqUAZ2ZDwVvxJwEyTEt60tzvbcfX0TwfXaO+JDxd9gmr8P
he/f05NT+IlqFrcXyXD8PVc+29ZBr7ocM1k+VIzqclGIjHMO6VjytEO3xppbtEDz
iAA5MFYsCM5fiJRndNYiH51WvVMjmmY1SO6LJtqGiwZhX3/couMy71JorXeqGgaW
Yjrkvs8q9AtvTG3Nq9BpmJCz0kXHbMmULchooaNtpDlPVVti9CA08vJ/9PssWRfD
MrkVkEijTpkw/lWClqW91aGWT9vlMeQSBVZf8Cr2Zg9DQNAFEE4LiVmlt10odZGw
cE4TlhaCk2Z2X1AeuDTimyN7hL6FMVweMsLgio1XNpk/NOCGkgvXDo7R76MfU8PS
dsT2ItOIm6w=
=o9sa
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-18 4:27 ` Junio C Hamano
2005-11-18 4:35 ` John Benes
@ 2005-11-18 4:40 ` A Large Angry SCM
1 sibling, 0 replies; 35+ messages in thread
From: A Large Angry SCM @ 2005-11-18 4:40 UTC (permalink / raw)
To: Junio C Hamano; +Cc: John Benes, git
Junio C Hamano wrote:
> John Benes <smartcat99s@gmail.com> writes:
>
>>diff --git a/file4 b/file4
>>index
>>edc575dec543a684da5007b43886ee32ecb381ae..adb07b7ad3fa2c63251b06d1d39cb90a
>>85b860b4 100644
>>Files a/file4 and b/file4 differ
>
> Thanks. This is the same problem as what Large Angly SCM
> reports. What does your "diff --version" say?
> diff --version
diff (GNU diffutils) 2.8.7
Written by Paul Eggert, Mike Haertel, David Hayes,
Richard Stallman, and Len Tower.
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
^ permalink raw reply [flat|nested] 35+ messages in thread
* [PATCH] Deal with binary diff output from (unknown version of) diff
2005-11-18 4:26 ` Junio C Hamano
@ 2005-11-18 4:46 ` Junio C Hamano
2005-11-18 4:58 ` A Large Angry SCM
0 siblings, 1 reply; 35+ messages in thread
From: Junio C Hamano @ 2005-11-18 4:46 UTC (permalink / raw)
To: A Large Angry SCM, John Benes; +Cc: git
Some vintage of diff says just "Files X and Y differ\n", instead
of "Binary files X and Y differ\n", so catch both patterns.
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
Junio C Hamano <junkio@cox.net> writes:
>> Files /dev/null and b/file3 differ
>> diff --git a/file4 b/file4
>> index edc575d..adb07b7 100644
>> Files a/file4 and b/file4 differ
>
> Thanks. I've seen enough. I expected diff (GNU diffutils 2.8.1
> is what I have handy) output which says "Binary files a/foo and
> b/foo differ".
>
> Hmph. Now I'd need to find a way to catch at least these two
> cases...
Could you two try this patch please?
diff --git a/apply.c b/apply.c
index 129edb1..50be8f3 100644
--- a/apply.c
+++ b/apply.c
@@ -893,12 +893,24 @@ static int parse_chunk(char *buffer, uns
patchsize = parse_single_patch(buffer + offset + hdrsize, size - offset - hdrsize, patch);
if (!patchsize) {
- static const char binhdr[] = "Binary files ";
-
- if (sizeof(binhdr) - 1 < size - offset - hdrsize &&
- !memcmp(binhdr, buffer + hdrsize + offset,
- sizeof(binhdr)-1))
- patch->is_binary = 1;
+ static const char *binhdr[] = {
+ "Binary files ",
+ "Files ",
+ NULL,
+ };
+ int i;
+ int hd = hdrsize + offset;
+ unsigned long llen = linelen(buffer + hd, size - hd);
+
+ if (!memcmp(" differ\n", buffer + hd + llen - 8, 8))
+ for (i = 0; binhdr[i]; i++) {
+ int len = strlen(binhdr[i]);
+ if (len < size - hd &&
+ !memcmp(binhdr[i], buffer + hd, len)) {
+ patch->is_binary = 1;
+ break;
+ }
+ }
/* Empty patch cannot be applied if:
* - it is a binary patch and we do not do binary_replace, or
^ permalink raw reply related [flat|nested] 35+ messages in thread
* Re: [PATCH] Deal with binary diff output from (unknown version of) diff
2005-11-18 4:46 ` [PATCH] Deal with binary diff output from (unknown version of) diff Junio C Hamano
@ 2005-11-18 4:58 ` A Large Angry SCM
0 siblings, 0 replies; 35+ messages in thread
From: A Large Angry SCM @ 2005-11-18 4:58 UTC (permalink / raw)
To: Junio C Hamano; +Cc: John Benes, git
Passed here!
Junio C Hamano wrote:
> Some vintage of diff says just "Files X and Y differ\n", instead
> of "Binary files X and Y differ\n", so catch both patterns.
>
> Signed-off-by: Junio C Hamano <junkio@cox.net>
>
> ---
>
> Junio C Hamano <junkio@cox.net> writes:
>
> >> Files /dev/null and b/file3 differ
> >> diff --git a/file4 b/file4
> >> index edc575d..adb07b7 100644
> >> Files a/file4 and b/file4 differ
> >
> > Thanks. I've seen enough. I expected diff (GNU diffutils 2.8.1
> > is what I have handy) output which says "Binary files a/foo and
> > b/foo differ".
> >
> > Hmph. Now I'd need to find a way to catch at least these two
> > cases...
>
> Could you two try this patch please?
[snip snip]
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 11:51 ` Johannes Schindelin
2005-11-17 12:40 ` Alex Riesen
2005-11-17 19:29 ` Junio C Hamano
@ 2005-11-18 12:01 ` timo
2 siblings, 0 replies; 35+ messages in thread
From: timo @ 2005-11-18 12:01 UTC (permalink / raw)
To: git
On Thu, Nov 17, 2005 at 12:51:22PM +0100, Johannes Schindelin wrote:
> Hi,
>
> On Thu, 17 Nov 2005, Junio C Hamano wrote:
>
> > It appears we'd better have something like this in the main
> > Makefile, so people do not have to do it themselves everywhere?
>
> I'd like to wait to have a reaction from other people. I vividly remember
> my eyes falling out of my sockets when somebody reported success on cygwin
> without NO_MMAP. If there is *any* cygwin version which fixes it, we
> should rather make people upgrade, no?
>
It is not in the official Cygwin distribution yet. Though I've started the
formalities, moving house as been taking all my spare time. So, the upgrade
worries would be for those people tracking the main git repo. As they are
almost certainly on this list, they should be aware of possible breakage.
I've noted some breakage with git-archimport, git-svnimport and git-cvsimport,
though i have not yet looked into it, some are due to the lack of necessary
tools under Cygwin. I'm re-jigging my distro script to emulate the new package
split and plan to distribute just the git 'core' stuff for the moment.
I was wondering if anyone has scripts that i could use to test the
svn/arch/CVS import/export for expected behavior?
Tim.
"However beautiful the strategy, you should occasionally look at the results."
-- Winston Churchill
^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: master has some toys
2005-11-17 19:29 ` Junio C Hamano
2005-11-17 23:36 ` Johannes Schindelin
@ 2005-11-18 20:09 ` Junio C Hamano
1 sibling, 0 replies; 35+ messages in thread
From: Junio C Hamano @ 2005-11-18 20:09 UTC (permalink / raw)
To: git
Junio C Hamano <junkio@cox.net> writes:
I just had a small excitement finding out I did something right
and felt an urge to brag ;-).
> I am not so sure about forcing people upgrade, but we may end up
> deciding it is better not to have NO_MMAP as the default. If
> that turns out to be the case, I'd prefer to have something like
> this instead:
>
> diff --git a/Makefile b/Makefile
> index 7ce62e8..215abf0 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -213,6 +213,10 @@ endif
> ifeq ($(uname_O),Cygwin)
> NO_STRCASESTR = YesPlease
> NEEDS_LIBICONV = YesPlease
> + # There are conflicting reports about this.
> + # On some boxes NO_MMAP is needed, and not so elsewhere.
> + # Try uncommenting this if you see things break -- YMMV.
> + # NO_MMAP = YesPlease
> NO_IPV6 = YesPlease
> X = .exe
> endif
I did the above patch on top of "pu", which contained the patch
from Pavel Roskin and sent it out. Later I saved the message
from my mbox, went back to the "master" branch, whose Makefile
had the releveant part like this:
ifeq ($(uname_O),Cygwin)
NO_STRCASESTR = YesPlease
NEEDS_LIBICONV = YesPlease
NO_IPV6 = YesPlease
X = .exe
ALL_CFLAGS += -DUSE_SYMLINK_HEAD=0
endif
Notice ALL_CFLAGS line? The patch does not apply cleanly and
usual e-mail patch application tool would have barfed; git-apply
would not allow any fuzz, and patch would have dropped a .rej
file.
However, I usually run "git-am" with --3way option enabled when
applying the e-mailed patches. After git-apply failed, it
noticed I am applying on top of a different blob, namely, the
Makefile from somewhere else (it reads the "index 7ce62e8"),
then fell back on 3-way merge and made a clean commit. Happy.
Back to day-job.
^ permalink raw reply [flat|nested] 35+ messages in thread
end of thread, other threads:[~2005-11-18 20:09 UTC | newest]
Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-15 14:42 stgit truncates binary files to zero length when applying patches Karl Hasselström
2005-11-16 11:11 ` Catalin Marinas
2005-11-16 11:54 ` Karl Hasselström
2005-11-16 12:31 ` Catalin Marinas
2005-11-16 13:03 ` Karl Hasselström
2005-11-16 18:30 ` Junio C Hamano
2005-11-16 22:15 ` [PATCH] git-apply: fail if a patch cannot be applied Junio C Hamano
2005-11-17 1:21 ` master has some toys Junio C Hamano
2005-11-17 8:29 ` Alex Riesen
2005-11-17 10:12 ` Junio C Hamano
2005-11-17 10:36 ` Alex Riesen
2005-11-17 11:03 ` Junio C Hamano
2005-11-18 1:23 ` John Benes
2005-11-18 2:48 ` Johannes Schindelin
2005-11-18 4:01 ` John Benes
2005-11-18 3:36 ` Junio C Hamano
2005-11-18 3:49 ` A Large Angry SCM
2005-11-18 4:26 ` Junio C Hamano
2005-11-18 4:46 ` [PATCH] Deal with binary diff output from (unknown version of) diff Junio C Hamano
2005-11-18 4:58 ` A Large Angry SCM
2005-11-18 4:01 ` master has some toys John Benes
2005-11-18 4:27 ` Junio C Hamano
2005-11-18 4:35 ` John Benes
2005-11-18 4:40 ` A Large Angry SCM
2005-11-17 11:22 ` Johannes Schindelin
2005-11-17 11:08 ` Johannes Schindelin
2005-11-17 11:16 ` Junio C Hamano
2005-11-17 11:21 ` Alex Riesen
2005-11-17 11:51 ` Johannes Schindelin
2005-11-17 12:40 ` Alex Riesen
2005-11-17 19:29 ` Junio C Hamano
2005-11-17 23:36 ` Johannes Schindelin
2005-11-18 20:09 ` Junio C Hamano
2005-11-18 12:01 ` timo
2005-11-17 11:20 ` Alex Riesen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).