From: Junio C Hamano <gitster@pobox.com>
To: Phil Hord <hordp@cisco.com>
Cc: "git\@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: [PATCH] Make is_gitfile a non-static generic function
Date: Tue, 11 Oct 2011 16:45:59 -0700 [thread overview]
Message-ID: <7vipnvccso.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <4E94C8AB.3040807@cisco.com> (Phil Hord's message of "Tue, 11 Oct 2011 18:52:27 -0400")
Phil Hord <hordp@cisco.com> writes:
> The new is_gitfile is an amalgam of similar functional checks
> from different places in the code....
> diff --git a/builtin/clone.c b/builtin/clone.c
> index 488f48e..5110399 100644
> --- a/builtin/clone.c
> +++ b/builtin/clone.c
> @@ -120,13 +120,7 @@ static char *get_repo_path(const char *repo, int
> *is_bundle)
> return xstrdup(absolute_path(path));
> } else if (S_ISREG(st.st_mode) && st.st_size > 8) {
> /* Is it a "gitfile"? */
> - char signature[8];
> - int len, fd = open(path, O_RDONLY);
> - if (fd < 0)
> - continue;
> - len = read_in_full(fd, signature, 8);
> - close(fd);
> - if (len != 8 || strncmp(signature, "gitdir: ", 8))
> + if (!is_gitfile(path))
> continue;
> path = read_gitfile(path);
> if (path) {
> diff --git a/cache.h b/cache.h
> index 601f6f6..7a8d9f9 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -441,6 +441,7 @@ extern const char *get_git_work_tree(void);
> extern const char *read_gitfile(const char *path);
> extern const char *resolve_gitdir(const char *suspect);
> extern void set_git_work_tree(const char *tree);
> +extern int is_gitfile(const char *path);
> #define ALTERNATE_DB_ENVIRONMENT "GIT_ALTERNATE_OBJECT_DIRECTORIES"
> diff --git a/transport.c b/transport.c
> index f3195c0..d08a826 100644
> --- a/transport.c
> +++ b/transport.c
> @@ -859,7 +859,11 @@ static int is_local(const char *url)
> has_dos_drive_prefix(url);
> }
> -static int is_gitfile(const char *url)
> +/*
> + * See if the referenced file looks like a 'gitfile'.
> + * Does not try to determine if the referenced gitdir is actually valid.
> + */
> +int is_gitfile(const char *url)
> {
> struct stat st;
> char buf[9];
After looking at this patch and the way the other caller in transport.c
uses it, I am more and more convinced that "is_gitfile()" is a stupid and
horrible mistake.
The caller in transport.c says "I am about to read from a regular file,
and usually I would treat it as a bundle, but I want to avoid that
codepath if that regular file is not a bundle. So I use the codepath only
when that file is not a gitfile".
It should be saying "Is it a bundle? Then I'd use the codepath to read
from the bundle" to begin with. Otherwise the code will break when we add
yet another regular file we can fetch from that is not a bundle nor a
gitfile.
I think the hand-crafted check in builtin/clone.c you removed originated
from laziness to avoid teaching read_gitfile() to read potential gitfile
silently (and signal errors by simply returning NULL). I also suspect the
codepath may become simpler if we had a way to ask "Is this a bundle?".
I think read_bundle_header() in bundle.c can be refactored to a silent
interface that allows us to ask "Is this a bundle?" question properly.
next prev parent reply other threads:[~2011-10-11 23:46 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <4E94C70E.3080003@cisco.com>
2011-10-11 22:52 ` [PATCH] Make is_gitfile a non-static generic function Phil Hord
2011-10-11 23:26 ` Junio C Hamano
2011-10-11 23:45 ` Junio C Hamano [this message]
2011-10-12 13:29 ` Phil Hord
2011-10-12 18:01 ` Phil Hord
2011-10-12 18:08 ` Junio C Hamano
2011-10-12 19:47 ` Phil Hord
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=7vipnvccso.fsf@alter.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=hordp@cisco.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.