From: Linus Torvalds <torvalds@osdl.org>
To: Jonas Fonseca <fonseca@diku.dk>
Cc: Junio C Hamano <junkio@cox.net>, Git Mailing List <git@vger.kernel.org>
Subject: Re: git-rev-list: add "--dense" flag
Date: Tue, 25 Oct 2005 11:23:49 -0700 (PDT) [thread overview]
Message-ID: <Pine.LNX.4.64.0510251110050.10477@g5.osdl.org> (raw)
In-Reply-To: <20051025180707.GA7463@diku.dk>
On Tue, 25 Oct 2005, Jonas Fonseca wrote:
>
> Is the initial commit supposed to be listed when the file has been added
> later?
Right now --dense will _always_ show the root commit. I didn't do the
logic that does the diff against an empty tree. I was lazy.
This patch does that, and may or may not work.
Does this match what you expected?
Linus
----
diff --git a/rev-list.c b/rev-list.c
index 5f125fd..038dae2 100644
--- a/rev-list.c
+++ b/rev-list.c
@@ -439,6 +439,30 @@ static int same_tree(struct tree *t1, st
return !is_different;
}
+static int same_tree_as_empty(struct tree *t1)
+{
+ int retval;
+ void *tree;
+ struct tree_desc empty, real;
+
+ if (!t1)
+ return 0;
+
+ tree = read_object_with_reference(t1->object.sha1, "tree", &real.size, NULL);
+ if (!tree)
+ return 0;
+ real.buf = tree;
+
+ empty.buf = "";
+ empty.size = 0;
+
+ is_different = 0;
+ retval = diff_tree(&empty, &real, "", &diff_opt);
+ free(tree);
+
+ return !retval && !is_different;
+}
+
static struct commit *try_to_simplify_merge(struct commit *commit, struct commit_list *parent)
{
if (!commit->tree)
@@ -523,11 +547,17 @@ static void compress_list(struct commit_
struct commit_list *parent = commit->parents;
list = list->next;
+ if (!parent) {
+ if (!same_tree_as_empty(commit->tree))
+ commit->object.flags |= TREECHANGE;
+ continue;
+ }
+
/*
* Exactly one parent? Check if it leaves the tree
* unchanged
*/
- if (parent && !parent->next) {
+ if (!parent->next) {
struct tree *t1 = commit->tree;
struct tree *t2 = parent->item->tree;
if (!t1 || !t2 || same_tree(t1, t2))
next prev parent reply other threads:[~2005-10-25 18:24 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-21 23:40 git-rev-list: add "--dense" flag Linus Torvalds
2005-10-21 23:47 ` Linus Torvalds
2005-10-21 23:55 ` Linus Torvalds
2005-10-22 0:37 ` Petr Baudis
2005-10-22 0:47 ` Handling renames Petr Baudis
2005-10-22 1:28 ` Linus Torvalds
2005-10-22 1:51 ` Petr Baudis
2005-10-22 2:10 ` Junio C Hamano
2005-10-22 2:49 ` Petr Baudis
2005-10-22 3:23 ` Linus Torvalds
2005-10-22 1:26 ` git-rev-list: add "--dense" flag Linus Torvalds
2005-10-22 2:56 ` Petr Baudis
2005-10-22 3:30 ` Linus Torvalds
2005-10-22 3:55 ` Junio C Hamano
2005-10-22 20:37 ` Linus Torvalds
2005-10-25 18:07 ` Jonas Fonseca
2005-10-25 18:23 ` Linus Torvalds [this message]
2005-10-25 18:40 ` Jonas Fonseca
2005-10-25 18:52 ` Linus Torvalds
2005-10-25 18:50 ` Linus Torvalds
-- strict thread matches above, loose matches on Subject: below --
2005-10-23 19:30 Marco Costalba
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.64.0510251110050.10477@g5.osdl.org \
--to=torvalds@osdl.org \
--cc=fonseca@diku.dk \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).