git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Thomas Gummerer <t.gummerer@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, trast@student.ethz.ch, mhagger@alum.mit.edu,
	pcouds@gmail.com, robin.rosenberg@dewire.com
Subject: Re: [PATCH/RFC v2 06/16] t3700: sleep for 1 second, to avoid interfering with the racy code
Date: Thu, 9 Aug 2012 15:19:32 +0200	[thread overview]
Message-ID: <20120809131932.GD25671@tommy-fedora.surfnet.iacbox> (raw)
In-Reply-To: <7vmx25rtj5.fsf@alter.siamese.dyndns.org>

On 08/08, Junio C Hamano wrote:
> Junio C Hamano <gitster@pobox.com> writes:
> 
> > So whether done with "sleep" or "test-chmtime", avoiding a racily
> > clean situation sounds like sweeping a bug in the v5 code in racy
> > situation under the rug to me (unless I am misunderstanding what
> > you are doing with this change and in your explanation, or the test
> > was checking a wrong thing, that is).
> >
> > Even more confused....
> 
> OK, after staring this test for a long time, and going back to
> 3d1f148 (refresh_index: do not show unmerged path that is outside
> pathspec, 2012-02-17), I give up.
> 
> Let me ask the same question in a more direct way.  Which part of
> this test break with your series?
> 
>         test_expect_success 'git add --refresh with pathspec' '
>                 git reset --hard &&
>                 echo >foo && echo >bar && echo >baz &&
>                 git add foo bar baz && H=$(git rev-parse :foo) && git rm -f foo &&
>                 echo "100644 $H 3	foo" | git update-index --index-info &&
> 	# "sleep 1 &&" in the update here ...
>                 test-chmtime -60 bar baz &&
>                 >expect &&
>                 git add --refresh bar >actual &&
>                 test_cmp expect actual &&
> 
>                 git diff-files --name-only >actual &&
>                 ! grep bar actual&&
>                 grep baz actual
>         '
> 
> We prepare an index with bunch of paths, we make "foo" unmerged, we
> smudge bar and baz stat-dirty, so that "diff-files" would report
> them, even though their contents match what is recorded in the
> index.

After getting confused a bit myself, I now think here is the problem.
The v5 code smudges baz when doing git add --refresh bar.  Therefore
baz isn't considered stat-dirty by the code, but a racily smudged entry
and therefore its content gets checked, thus not showing up in
git diff-files.  The mtime doesn't get checked anymore as it is used
as smudge marker and thus 0.  Adding sleep just avoids smudging the
entry.

The alternative would be to use the size or the crc as smudge marker
but I don't think they are good canidates, as they can still be used
by the reader to avoid checking the filesystem.

Another alternative would be to introduce a CE_SMUDGED flag as it was
suggested by Thomas on irc IIRC, but we chose to use the mtime as
smudge marker instead.

> Then we say "git add --refresh bar".  As far as I know, the output
> from "git add --refresh <pathspec>" is limited to "foo: needs merge"
> if and only if "foo" is covered by <pathspec> and "foo" is unmerged.
> 
> 	Side note: If "--verbose" is given to the same command, we
> 	also give "Unstaged changes after refreshing the index:"
> 	followed by "M foo" or "U foo" if "foo" does not match the
> 	index but not unmerged, or if "foo" is unmerged, again if
> 	and only if "foo" is covered by <pathspec>.  But that is not
> 	how we invoke "git add --refresh" in this test.
> 
> So if you are getting a test failure from the test_cmp, wouldn't it
> mean that your series broke what 3d1f148 did (namely, make sure we
> report only on paths that are covered by <pathspec>, in this case
> "bar"), as the contents of "bar" in the working tree matches what is
> recorded in the index?
> 
> If the failure you are seeing is that "bar" appears in the output of
> "git diff-files --name-only", it means that "diff-files" noticed
> that "bar" is stat-dirty after "git add --refresh bar".  Wouldn't it
> mean that the series broke "git add --refresh bar" in such a way
> that it does not to refresh what it was told to refresh?
> 
> Another test that could fail after the point you added "sleep 1" is
> that the output from "git diff-files --name-only" fails to list
> "baz" in its output, but with "test-chmtime -60 bar baz", we made
> sure that "bar" and "baz" are stat-dirty, and we only refreshed
> "bar" and not "baz".  If that is the case, then would it mean that
> the series broke "git add --refresh bar" in such a way that it
> refreshes something other than what it was told to refresh?
>
> In any case, having to change this test in any way smells like there
> is some breakage in the series; it is not immediately obvious to me
> that the current test is checking anything wrong as I suspected in
> the earlier message.
> 
> So,... I dunno.
> 

  reply	other threads:[~2012-08-09 13:19 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-05 21:48 [PATCH/RFC v2 0/16] Introduce index file format version 5 Thomas Gummerer
2012-08-05 21:48 ` [PATCH/RFC v2 01/16] Modify cache_header to prepare for other index formats Thomas Gummerer
2012-08-06  1:17   ` Junio C Hamano
2012-08-07 12:41     ` Thomas Gummerer
2012-08-07 15:45       ` Junio C Hamano
2012-08-05 21:48 ` [PATCH/RFC v2 02/16] Modify read functions " Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 03/16] Modify match_stat_basic " Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 04/16] Modify write functions " Thomas Gummerer
2012-08-06  1:34   ` Junio C Hamano
2012-08-07 12:50     ` Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 05/16] t2104: Don't fail for index versions other than [23] Thomas Gummerer
2012-08-06  1:36   ` Junio C Hamano
2012-08-05 21:49 ` [PATCH/RFC v2 06/16] t3700: sleep for 1 second, to avoid interfering with the racy code Thomas Gummerer
2012-08-06  1:43   ` Junio C Hamano
2012-08-07 16:59     ` Thomas Gummerer
2012-08-08 20:16       ` Junio C Hamano
2012-08-08 20:57         ` Junio C Hamano
2012-08-09 13:19           ` Thomas Gummerer [this message]
2012-08-09 16:51             ` Junio C Hamano
2012-08-09 22:51               ` Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 07/16] Add documentation of the index-v5 file format Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 08/16] Make in-memory format aware of stat_crc Thomas Gummerer
2012-08-06  1:46   ` Junio C Hamano
2012-08-07 19:02     ` Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 09/16] Read index-v5 Thomas Gummerer
2012-08-06  5:17   ` Junio C Hamano
2012-08-08  7:41     ` Thomas Gummerer
2012-08-08 16:49       ` Junio C Hamano
2012-08-08 20:44         ` Thomas Gummerer
2012-08-08 21:50           ` Junio C Hamano
2012-08-05 21:49 ` [PATCH/RFC v2 10/16] Read resolve-undo data Thomas Gummerer
2012-08-06  1:51   ` Junio C Hamano
2012-08-07 19:17     ` Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 11/16] Read cache-tree in index-v5 Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 12/16] Write index-v5 Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 13/16] Write index-v5 cache-tree data Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 14/16] Write resolve-undo data for index-v5 Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 15/16] update-index.c: add a force-rewrite option Thomas Gummerer
2012-08-06  1:58   ` Junio C Hamano
2012-08-08  7:31     ` Thomas Gummerer
2012-08-05 21:49 ` [PATCH/RFC v2 16/16] p0002-index.sh: add perf test for the index formats Thomas Gummerer
2012-08-06 14:35 ` [PATCH/RFC v2 0/16] Introduce index file format version 5 Nguyễn Thái Ngọc Duy
2012-08-06 14:35   ` [PATCH 1/2] Move index v2 specific code out of read-cache Nguyễn Thái Ngọc Duy
2012-08-06 14:36   ` [PATCH 2/2] Add index-v5 Nguyễn Thái Ngọc Duy
2012-08-07 21:52     ` Robin Rosenberg
2012-08-08 10:54       ` Thomas Gummerer
2012-08-06 15:51   ` [PATCH/RFC v2 0/16] Introduce index file format version 5 Junio C Hamano
2012-08-06 16:06     ` Thomas Gummerer
2012-08-06 17:46   ` Junio C Hamano
2012-08-07 12:16     ` Nguyen Thai Ngoc Duy
2012-08-08  1:38       ` Junio C Hamano
2012-08-08 13:54         ` Nguyen Thai Ngoc Duy
2012-08-08 16:31           ` Junio C Hamano
2012-08-09  2:28             ` Nguyen Thai Ngoc Duy
2012-08-07 22:31     ` Thomas Rast
2012-08-07 23:26       ` Junio C Hamano
2012-08-08  9:07         ` Thomas Rast
2012-08-08 22:47           ` Junio C Hamano
2012-08-08 10:30       ` Nguyen Thai Ngoc Duy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120809131932.GD25671@tommy-fedora.surfnet.iacbox \
    --to=t.gummerer@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=mhagger@alum.mit.edu \
    --cc=pcouds@gmail.com \
    --cc=robin.rosenberg@dewire.com \
    --cc=trast@student.ethz.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).