All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nguyen Thai Ngoc Duy <pclouds@gmail.com>
To: Johannes Sixt <j.sixt@viscovery.net>
Cc: Junio C Hamano <gitster@pobox.com>,
	Taylor Hedberg <tmhedberg@gmail.com>,
	Bertrand BENOIT <projettwk@users.sourceforge.net>,
	git@vger.kernel.org
Subject: Re: [PATCH] Add test that checkout does not overwrite entries in .git/info/exclude
Date: Mon, 21 Nov 2011 15:17:01 +0700	[thread overview]
Message-ID: <20111121081701.GA7985@do> (raw)
In-Reply-To: <4EC9FC81.3080306@viscovery.net>

On Mon, Nov 21, 2011 at 08:23:45AM +0100, Johannes Sixt wrote:
> From: Johannes Sixt <j6t@kdbg.org>
> 
> It is an unintended accident that entries matched by .git/info/exclude are
> considered precious, but entries matched by .gitignore are not. That is,
> 'git checkout' will overwrite untracked files matched by .gitignore, but
> refuses to overwrite files matched by .git/info/exclude.
> 
> It is a lucky accident: it allows the distinction between "untracked but
> precious" and "untracked and garbage". And it is a doubly lucky accident:
> .gitignore entries are meant for files like build products, which usually
> affect all consumers of a repository, whereas .git/info/exclude is
> intended for personal files, which frequently are precious (think of a
> TODO file).
> 
> Add a test that codifies the accident as wanted behavior.

If you want to keep this accident (which is a bug to me), you may want
to add the reason: callers to unpack_trees() are supposed to also
setup exclude rules in .git/info/exclude before calling
unpack_trees(), which they don't.

So .git/info/exclude is entirely dismissed. This patch makes t2023.3
fail. I haven't dug into history to see if this is on purpose though.

-- 8< --
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 2a80772..c2fc2ba 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -412,6 +412,8 @@ static int merge_working_tree(struct checkout_opts *opts,
 		topts.dir = xcalloc(1, sizeof(*topts.dir));
 		topts.dir->flags |= DIR_SHOW_IGNORED;
 		topts.dir->exclude_per_dir = ".gitignore";
+		if (!access(git_path("info/exclude"), R_OK))
+			add_excludes_from_file(topts.dir, git_path("info/exclude"));
 		tree = parse_tree_indirect(old->commit ?
 					   old->commit->object.sha1 :
 					   EMPTY_TREE_SHA1_BIN);
-- 8< --
--
Duy

  parent reply	other threads:[~2011-11-21  8:17 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-20 13:42 Bug report - local (and git ignored) file silently removed after checkout Bertrand BENOIT
2011-11-20 21:16 ` Junio C Hamano
2011-11-20 22:19   ` Taylor Hedberg
2011-11-21  3:36     ` Junio C Hamano
2011-11-21  7:23       ` [PATCH] Add test that checkout does not overwrite entries in .git/info/exclude Johannes Sixt
2011-11-21  7:45         ` Philip Oakley
2011-11-21  7:59           ` Junio C Hamano
2011-11-21  7:50         ` Junio C Hamano
2011-11-21  8:52           ` Nguyen Thai Ngoc Duy
2011-11-21 17:27             ` Junio C Hamano
2011-11-23 11:31               ` Nguyen Thai Ngoc Duy
2011-11-21  8:17         ` Nguyen Thai Ngoc Duy [this message]
2011-11-21 15:18           ` Junio C Hamano
2011-11-21 15:44             ` Bertrand BENOIT
2011-11-23 11:40             ` Nguyen Thai Ngoc Duy
2011-11-23 17:16               ` Junio C Hamano
2011-11-24  1:35                 ` Nguyen Thai Ngoc Duy
2011-11-24  5:17                   ` Junio C Hamano
2011-11-24  5:39                     ` Nguyen Thai Ngoc Duy
2011-11-27 10:13             ` Nguyen Thai Ngoc Duy
2011-11-27 10:15               ` [PATCH 1/2] checkout,merge: loosen overwriting untracked file check based on info/exclude Nguyễn Thái Ngọc Duy
2011-11-27 10:15                 ` [PATCH 2/2] checkout,merge: disallow overwriting ignored files with --no-overwrite-ignore Nguyễn Thái Ngọc Duy
2011-11-29 18:17                 ` [PATCH 1/2] checkout,merge: loosen overwriting untracked file check based on info/exclude Junio C Hamano

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=20111121081701.GA7985@do \
    --to=pclouds@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j.sixt@viscovery.net \
    --cc=projettwk@users.sourceforge.net \
    --cc=tmhedberg@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.