From: Thomas Rast <tr@thomasrast.ch>
To: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Cc: git@vger.kernel.org, Junio C Hamano <gitster@pobox.com>,
Max Kirillov <max@max630.net>,
Eric Sunshine <sunshine@sunshineco.com>
Subject: Re: [PATCH v7 25/31] prune: strategies for linked checkouts
Date: Fri, 18 Jul 2014 20:17:01 +0200 [thread overview]
Message-ID: <87r41i352a.fsf@thomasrast.ch> (raw)
In-Reply-To: <1405227068-25506-26-git-send-email-pclouds@gmail.com> ("Nguyễn Thái Ngọc Duy"'s message of "Sun, 13 Jul 2014 11:51:02 +0700")
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
> (alias R=$GIT_COMMON_DIR/repos/<id>)
>
> - linked checkouts are supposed to keep its location in $R/gitdir up
> to date. The use case is auto fixup after a manual checkout move.
>
> - linked checkouts are supposed to update mtime of $R/gitdir. If
> $R/gitdir's mtime is older than a limit, and it points to nowhere,
> repos/<id> is to be pruned.
>
> - If $R/locked exists, repos/<id> is not supposed to be pruned. If
> $R/locked exists and $R/gitdir's mtime is older than a really long
> limit, warn about old unused repo.
>
> - "git checkout --to" is supposed to make a hard link named $R/link
> pointing to the .git file on supported file systems to help detect
> the user manually deleting the checkout. If $R/link exists and its
> link count is greated than 1, the repo is kept.
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> Documentation/git-prune.txt | 3 +
> Documentation/gitrepository-layout.txt | 19 ++++++
> builtin/checkout.c | 14 +++++
> builtin/prune.c | 99 ++++++++++++++++++++++++++++++
> setup.c | 13 ++++
> t/t2026-prune-linked-checkouts.sh (new +x) | 84 +++++++++++++++++++++++++
I get this from t2026.2 under valgrind:
==21334== Conditional jump or move depends on uninitialised value(s)
==21334== at 0x46D49B: prune_repos_dir (prune.c:182)
==21334== by 0x46D8C0: cmd_prune (prune.c:252)
==21334== by 0x405C2F: run_builtin (git.c:351)
==21334== by 0x405E47: handle_builtin (git.c:530)
==21334== by 0x405F6B: run_argv (git.c:576)
==21334== by 0x40610B: main (git.c:663)
==21334== Uninitialised value was created by a stack allocation
==21334== at 0x46D3BB: prune_repos_dir (prune.c:169)
==21334==
{
<insert_a_suppression_name_here>
Memcheck:Cond
fun:prune_repos_dir
fun:cmd_prune
fun:run_builtin
fun:handle_builtin
fun:run_argv
fun:main
}
not ok 2 - prune files inside $GIT_DIR/repos
#
# mkdir .git/repos &&
# : >.git/repos/abc &&
# git prune --repos --verbose >actual &&
# cat >expect <<EOF &&
# Removing repos/abc: not a valid directory
# EOF
# test_i18ncmp expect actual &&
# ! test -f .git/repos/abc &&
# ! test -d .git/repos
#
I think it's because of the early 'return 0' ...
> +static int prune_repo_dir(const char *id, struct stat *st, struct strbuf *reason)
> +{
> + char *path;
> + int fd, len;
> +
> + if (!is_directory(git_path("repos/%s", id))) {
> + strbuf_addf(reason, _("Removing repos/%s: not a valid directory"), id);
> + return 1;
> + }
> + if (file_exists(git_path("repos/%s/locked", id)))
> + return 0;
in this line, before the stat() actually runs, which then in the
condition ...
> + if (stat(git_path("repos/%s/gitdir", id), st)) {
> + st->st_mtime = expire;
> + strbuf_addf(reason, _("Removing repos/%s: gitdir file does not exist"), id);
> + return 1;
> + }
[...]
> +}
> +
> +static void prune_repos_dir(void)
> +{
[...]
> + struct stat st;
[...]
> + if (!prune_repo_dir(d->d_name, &st, &reason) ||
> + st.st_mtime > expire)
causes the second arm to be evaluated when st.st_mtime is not
initialized yet. Can you look into this?
--
Thomas Rast
tr@thomasrast.ch
next prev parent reply other threads:[~2014-07-18 18:17 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-09 7:32 [PATCH v6 00/32] Support multiple checkouts Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 01/32] path.c: make get_pathname() return strbuf instead of static buffer Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 02/32] path.c: make get_pathname() call sites return const char * Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 03/32] git_snpath(): retire and replace with strbuf_git_path() Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 04/32] path.c: rename vsnpath() to do_git_path() Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 05/32] path.c: group git_path(), git_pathdup() and strbuf_git_path() together Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 06/32] setup_git_env: use git_pathdup instead of xmalloc + sprintf Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 07/32] setup_git_env(): introduce git_path_from_env() helper Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 08/32] git_path(): be aware of file relocation in $GIT_DIR Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 09/32] *.sh: respect $GIT_INDEX_FILE Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 10/32] reflog: avoid constructing .lock path with git_path Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 11/32] fast-import: use git_path() for accessing .git dir instead of get_git_dir() Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 12/32] commit: use SEQ_DIR instead of hardcoding "sequencer" Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 13/32] $GIT_COMMON_DIR: a new environment variable Nguyễn Thái Ngọc Duy
2014-07-09 7:32 ` [PATCH v6 14/32] git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objects Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 15/32] *.sh: avoid hardcoding $GIT_DIR/hooks/ Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 16/32] git-stash: avoid hardcoding $GIT_DIR/logs/ Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 17/32] setup.c: convert is_git_directory() to use strbuf Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 18/32] setup.c: detect $GIT_COMMON_DIR in is_git_directory() Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 19/32] setup.c: convert check_repository_format_gently to use strbuf Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 20/32] setup.c: detect $GIT_COMMON_DIR check_repository_format_gently() Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 21/32] setup.c: support multi-checkout repo setup Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 22/32] wrapper.c: wrapper to open a file, fprintf then close Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 23/32] use new wrapper write_file() for simple file writing Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 24/32] checkout: support checking out into a new working directory Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 25/32] checkout: clean up half-prepared directories in --to mode Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 26/32] checkout: detach if the branch is already checked out elsewhere Nguyễn Thái Ngọc Duy
2014-07-12 12:21 ` Max Kirillov
2014-07-09 7:33 ` [PATCH v6 27/32] prune: strategies for linked checkouts Nguyễn Thái Ngọc Duy
2014-07-09 11:24 ` Eric Sunshine
2014-07-09 7:33 ` [PATCH v6 28/32] gc: style change -- no SP before closing bracket Nguyễn Thái Ngọc Duy
2014-07-09 9:47 ` Eric Sunshine
2014-07-14 4:40 ` Junio C Hamano
2014-07-09 7:33 ` [PATCH v6 29/32] gc: support prune --repos Nguyễn Thái Ngọc Duy
2014-07-09 10:05 ` Eric Sunshine
2014-07-09 7:33 ` [PATCH v6 30/32] count-objects: report unused files in $GIT_DIR/repos/ Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 31/32] git_path(): keep "info/sparse-checkout" per work-tree Nguyễn Thái Ngọc Duy
2014-07-09 7:33 ` [PATCH v6 32/32] checkout: don't require a work tree when checking out into a new one Nguyễn Thái Ngọc Duy
2014-07-11 7:13 ` [PATCH v6 00/32] Support multiple checkouts Dennis Kaarsemaker
2014-07-13 4:50 ` [PATCH v7 00/31] " Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 01/31] path.c: make get_pathname() return strbuf instead of static buffer Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 02/31] path.c: make get_pathname() call sites return const char * Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 03/31] git_snpath(): retire and replace with strbuf_git_path() Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 04/31] path.c: rename vsnpath() to do_git_path() Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 05/31] path.c: group git_path(), git_pathdup() and strbuf_git_path() together Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 06/31] git_path(): be aware of file relocation in $GIT_DIR Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 07/31] *.sh: respect $GIT_INDEX_FILE Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 08/31] reflog: avoid constructing .lock path with git_path Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 09/31] fast-import: use git_path() for accessing .git dir instead of get_git_dir() Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 10/31] commit: use SEQ_DIR instead of hardcoding "sequencer" Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 11/31] $GIT_COMMON_DIR: a new environment variable Nguyễn Thái Ngọc Duy
2014-07-23 5:21 ` Eric Sunshine
2014-07-13 4:50 ` [PATCH v7 12/31] git-sh-setup.sh: use rev-parse --git-path to get $GIT_DIR/objects Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 13/31] *.sh: avoid hardcoding $GIT_DIR/hooks/ Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 14/31] git-stash: avoid hardcoding $GIT_DIR/logs/ Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 15/31] setup.c: convert is_git_directory() to use strbuf Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 16/31] setup.c: detect $GIT_COMMON_DIR in is_git_directory() Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 17/31] setup.c: convert check_repository_format_gently to use strbuf Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 18/31] setup.c: detect $GIT_COMMON_DIR check_repository_format_gently() Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 19/31] setup.c: support multi-checkout repo setup Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 20/31] wrapper.c: wrapper to open a file, fprintf then close Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 21/31] use new wrapper write_file() for simple file writing Nguyễn Thái Ngọc Duy
2014-07-13 4:50 ` [PATCH v7 22/31] checkout: support checking out into a new working directory Nguyễn Thái Ngọc Duy
2014-07-17 4:19 ` Max Kirillov
2014-07-17 6:37 ` Junio C Hamano
2014-07-18 4:10 ` Eric Sunshine
2014-07-13 4:51 ` [PATCH v7 23/31] checkout: clean up half-prepared directories in --to mode Nguyễn Thái Ngọc Duy
2014-07-20 23:55 ` Eric Sunshine
2014-07-21 3:34 ` Eric Sunshine
2014-07-23 8:02 ` Duy Nguyen
2014-07-13 4:51 ` [PATCH v7 24/31] checkout: detach if the branch is already checked out elsewhere Nguyễn Thái Ngọc Duy
2014-07-13 4:51 ` [PATCH v7 25/31] prune: strategies for linked checkouts Nguyễn Thái Ngọc Duy
2014-07-18 18:17 ` Thomas Rast [this message]
2014-07-19 12:52 ` Duy Nguyen
2014-07-13 4:51 ` [PATCH v7 26/31] gc: style change -- no SP before closing bracket Nguyễn Thái Ngọc Duy
2014-07-13 4:51 ` [PATCH v7 27/31] gc: factor out gc.pruneexpire parsing code Nguyễn Thái Ngọc Duy
2014-07-13 4:51 ` [PATCH v7 28/31] gc: support prune --repos Nguyễn Thái Ngọc Duy
2014-07-13 4:51 ` [PATCH v7 29/31] count-objects: report unused files in $GIT_DIR/repos/ Nguyễn Thái Ngọc Duy
2014-07-13 4:51 ` [PATCH v7 30/31] git_path(): keep "info/sparse-checkout" per work-tree Nguyễn Thái Ngọc Duy
2014-07-13 4:51 ` [PATCH v7 31/31] checkout: don't require a work tree when checking out into a new one Nguyễn Thái Ngọc Duy
2014-07-14 4:45 ` [PATCH v7 00/31] Support multiple checkouts Junio C Hamano
2014-07-14 11:06 ` Duy Nguyen
2014-07-14 17:05 ` 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=87r41i352a.fsf@thomasrast.ch \
--to=tr@thomasrast.ch \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=max@max630.net \
--cc=pclouds@gmail.com \
--cc=sunshine@sunshineco.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).