From: Junio C Hamano <gitster@pobox.com>
To: Marius Storm-Olsen <marius@trolltech.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] Ensure that commit/status don't stat all files when core.ignoreStat = true
Date: Tue, 27 May 2008 13:00:37 -0700 [thread overview]
Message-ID: <7v7idf1pqy.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: 1211880549-15758-1-git-send-email-marius@trolltech.com
Marius Storm-Olsen <marius@trolltech.com> writes:
> diff --git a/read-cache.c b/read-cache.c
> index 8b467f8..104e387 100644
> --- a/read-cache.c
> +++ b/read-cache.c
> @@ -882,6 +882,16 @@ static struct cache_entry *refresh_cache_ent(struct index_state *istate,
> if (ce_uptodate(ce))
> return ce;
>
> + /*
> + * assume_unchanged is used to avoid lstats to check if the
> + * file has been modified. When true, the user need to
> + * manually update the index.
> + */
> + if (assume_unchanged) {
> + ce_mark_uptodate(ce);
> + return ce;
> + }
> +
The description for core.ignorestat in Documentation/config.txt is quite
bogus. That single bit does _not_ determine globally if we lstat(2) or
not. The description in Documentation/git-update-index.txt about it (look
for the section "Using assume unchanged bit") accurately describes what it
is meant to do. The rules are:
- (ce->ce_flags & CE_VALID) is the only thing that decides if we can omit
lstat(2) for _that particular path_. There is no global "we would
never ever run lstat(2)" option, and core.ignorestat certainly isn't
it.
- you can use the assume-unchanged mechanism without setting
core.ignorestat. You flip the CE_VALID bit for selected paths manually
and forget about them afterwards, when you would want all of your usual
"active" changes noticed by git, while skipping lstat(2) overhead in
areas you are not interested in.
- when you say "git update-index" (or "git add") for a path, if you have
core.ignorestat set, that path is automatically marked with CE_VALID,
so that later lstat(2) will be omitted for that particular path. IOW,
by having core.ignorestat set, you are promising that you are not going
to _further_ change the work tree contents _without_ telling git --- or
at least you are promising that you _will_ tell git if you change it
when it matters. But you have to tell git at least once what the
contents are.
Would it be sufficient for what you are trying to do if you changed that
test to something like this?
/*
* CE_VALID means the user promised us that the change to
* the work tree does not matter and told us not to worry.
*/
if (!ignore_valid && (ce->ce_flags & CE_VALID)) {
ce_mark_uptodate(ce);
return ce;
}
> diff --git a/wt-status.c b/wt-status.c
> index a44c543..72db466 100644
> --- a/wt-status.c
> +++ b/wt-status.c
> @@ -342,7 +342,14 @@ void wt_status_print(struct wt_status *s)
> wt_status_print_changed(s);
> if (wt_status_submodule_summary)
> wt_status_print_submodule_summary(s);
> - wt_status_print_untracked(s);
> +
> + if (assume_unchanged && !s->untracked) {
> + if (s->commitable)
> + fprintf(s->fp, "# Untracked files not listed (use -u option to show untracked files)\n");
> + /* !s->commitable message displayed below */
> + }
> + else
> + wt_status_print_untracked(s);
>
> if (s->verbose && !s->is_initial)
> wt_status_print_verbose(s);
> @@ -357,6 +364,8 @@ void wt_status_print(struct wt_status *s)
> printf("nothing added to commit but untracked files present (use \"git add\" to track)\n");
> else if (s->is_initial)
> printf("nothing to commit (create/copy files and use \"git add\" to track)\n");
> + else if (assume_unchanged && !s->untracked)
> + printf("nothing to commit (use -u to show untracked files)\n");
> else
> printf("nothing to commit (working directory clean)\n");
> }
The core.ignorestat variable does not have anything to do with showing
untracked files. It is about "do we mark the added path as CE_VALID,
meaning that we do not have to lstat(2) them?" IOW, it is about tracked
files.
While it might be useful in certain workflows to ignore untracked files, I
do not think it is a good idea to overload such an unrelated meaning to
the variable.
next prev parent reply other threads:[~2008-05-27 20:02 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-27 9:29 [PATCH] Ensure that commit/status don't stat all files when core.ignoreStat = true Marius Storm-Olsen
2008-05-27 20:00 ` Junio C Hamano [this message]
2008-05-27 20:21 ` Marius Storm-Olsen
2008-05-30 11:14 ` [PATCH 1/3] Clearify the documentation for core.ignoreStat Marius Storm-Olsen
2008-05-30 8:54 ` [PATCH 2/3] Introduce core.showUntrackedFiles to make it possible to disable showing of untracked files Simon Hausmann
2008-05-30 12:38 ` [PATCH 3/3] Add shortcut in refresh_cache_ent() for marked entries Marius Storm-Olsen
2008-05-30 13:14 ` Marius Storm-Olsen
2008-05-30 13:10 ` [PATCH 2/3] Introduce core.showUntrackedFiles to make it possible to disable showing of untracked files Marius Storm-Olsen
2008-05-30 13:16 ` Marius Storm-Olsen
2008-05-30 20:27 ` Junio C Hamano
2008-05-31 6:41 ` Marius Storm-Olsen
2008-06-03 13:09 ` [PATCH] Add an optional <mode> argument to commit/status -u|--untracked-files option Marius Storm-Olsen
2008-06-03 13:12 ` [PATCH] Add configuration option for default untracked files mode Marius Storm-Olsen
2008-06-03 20:02 ` [PATCH] Add an optional <mode> argument to commit/status -u|--untracked-files option Junio C Hamano
2008-06-03 21:00 ` Marius Storm-Olsen
2008-06-05 8:31 ` [PATCH 1/3] " Marius Storm-Olsen
2008-06-05 12:22 ` [PATCH 2/3] Add argument 'no' commit/status option -u|--untracked-files Marius Storm-Olsen
2008-06-05 12:47 ` [PATCH 3/3] Add configuration option for default untracked files mode Marius Storm-Olsen
2008-06-07 1:55 ` [PATCH 1/3] Add an optional <mode> argument to commit/status -u|--untracked-files option Junio C Hamano
2008-06-09 6:54 ` Marius Storm-Olsen
2008-06-05 8:31 ` Marius Storm-Olsen
2008-06-05 12:22 ` [PATCH 2/3] Add argument 'no' commit/status option -u|--untracked-files Marius Storm-Olsen
2008-06-05 12:47 ` [PATCH 3/3] Add configuration option for default untracked files mode Marius Storm-Olsen
2008-06-10 6:23 ` [PATCH 1/3] Add an optional <mode> argument to commit/status -u|--untracked-files option Junio C Hamano
2008-06-03 20:14 ` [PATCH] " Jeff King
2008-06-03 21:17 ` Marius Storm-Olsen
2008-06-03 22:27 ` Jeff King
2008-06-03 22:26 ` しらいしななこ
[not found] ` <200806032227.m53MRLeD005668@mi0.bluebottle.com>
2008-06-03 22:53 ` Jeff King
2008-06-06 6:32 ` Alex Riesen
2008-06-06 6:56 ` Marius Storm-Olsen
-- strict thread matches above, loose matches on Subject: below --
2008-05-27 8:15 [PATCH] Ensure that commit/status don't stat all files when core.ignoreStat = true Marius Storm-Olsen
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=7v7idf1pqy.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=marius@trolltech.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 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).