From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Kate Rhodes <masukomi@gmail.com>,
git@vger.kernel.org
Subject: [PATCH 1/2] hard-code the empty tree object
Date: Thu, 14 Feb 2008 05:32:56 -0500 [thread overview]
Message-ID: <20080214103256.GA17951@coredump.intra.peff.net> (raw)
This maps sha1 4b825dc642cb6eb9a060e54bf8d69288fbee4904 to
the empty tree object, whether such an object exists in the
object database or not. The empty tree is useful for showing
some specialized diffs, especially for initial commits.
We also hard-code the special ref '{}' as an alias for the
empty tree. Users may refer to the empty tree by its
sha1 or by '{}'.
Thanks to Johannes Schindelin for the '{}' syntax and
implementation.
Signed-off-by: Jeff King <peff@peff.net>
---
This is a cleaned-up version of what's in pu, along with the magic ref
syntax from Johannes (2/2 will have the fixes to "git add -i").
cache.h | 5 +++++
sha1_file.c | 9 +++++++++
sha1_name.c | 5 +++++
3 files changed, 19 insertions(+), 0 deletions(-)
diff --git a/cache.h b/cache.h
index 3867ba7..e3abbe1 100644
--- a/cache.h
+++ b/cache.h
@@ -253,6 +253,11 @@ static inline enum object_type object_type(unsigned int mode)
#define INFOATTRIBUTES_FILE "info/attributes"
#define ATTRIBUTE_MACRO_PREFIX "[attr]"
+/* empty tree sha1: 4b825dc642cb6eb9a060e54bf8d69288fbee4904 */
+#define EMPTY_TREE_SHA1 \
+ "\x4b\x82\x5d\xc6\x42\xcb\x6e\xb9\xa0\x60" \
+ "\xe5\x4b\xf8\xd6\x92\x88\xfb\xee\x49\x04"
+
extern int is_bare_repository_cfg;
extern int is_bare_repository(void);
extern int is_inside_git_dir(void);
diff --git a/sha1_file.c b/sha1_file.c
index 66a4e00..8068a4b 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1845,6 +1845,13 @@ static struct cached_object {
} *cached_objects;
static int cached_object_nr, cached_object_alloc;
+static struct cached_object empty_tree = {
+ EMPTY_TREE_SHA1,
+ OBJ_TREE,
+ "",
+ 0
+};
+
static struct cached_object *find_cached_object(const unsigned char *sha1)
{
int i;
@@ -1854,6 +1861,8 @@ static struct cached_object *find_cached_object(const unsigned char *sha1)
if (!hashcmp(co->sha1, sha1))
return co;
}
+ if (!hashcmp(sha1, empty_tree.sha1))
+ return &empty_tree;
return NULL;
}
diff --git a/sha1_name.c b/sha1_name.c
index be8489e..165aa7d 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -716,5 +716,10 @@ int get_sha1_with_mode(const char *name, unsigned char *sha1, unsigned *mode)
return get_tree_entry(tree_sha1, cp+1, sha1,
mode);
}
+ if (ret && !strcmp(name, "{}")) {
+ *mode = 0755;
+ hashcpy(sha1, (unsigned char *)EMPTY_TREE_SHA1);
+ ret = 0;
+ }
return ret;
}
--
1.5.4.1.123.ge4e8d-dirty
next reply other threads:[~2008-02-14 10:33 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-14 10:32 Jeff King [this message]
2008-02-14 12:39 ` [PATCH 1/2] hard-code the empty tree object Johannes Schindelin
2008-02-14 14:03 ` Jeff King
2008-02-15 17:11 ` Junio C Hamano
2008-02-15 17:20 ` Jeff King
2008-02-15 17:42 ` Junio C Hamano
2008-02-15 18:25 ` Jeff King
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=20080214103256.GA17951@coredump.intra.peff.net \
--to=peff@peff.net \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=masukomi@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 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).