From: Johan Herland <johan@herland.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Johannes.Schindelin@gmx.de,
trast@student.ethz.ch, tavestbo@trolltech.com,
git@drmicha.warpmail.net, chriscool@tuxfamily.org,
spearce@spearce.org
Subject: Re: [PATCHv6 13/14] Allow flexible organization of notes trees, using both commit date and SHA1
Date: Sun, 13 Sep 2009 00:33:28 +0200 [thread overview]
Message-ID: <200909130033.28666.johan@herland.net> (raw)
In-Reply-To: <7viqfof1kc.fsf@alter.siamese.dyndns.org>
On Saturday 12 September 2009, Junio C Hamano wrote:
> Johan Herland <johan@herland.net> writes:
> > This is a major expansion of the notes lookup code to allow for
> > variations in the notes tree organization. The variations allowed
> > include mixing fanout schemes based on the commit dates of the
> > annotated commits (aka. date-based fanout) with fanout schemes based on
> > the SHA1 of the annotated commits (aka. SHA1-based fanout).
Note that this patch is about to be removed from this series, cf. today's
discussion with Shawn elsewhere in this thread.
> Will squash this in.
I agree with the attempt, but not all of the hunks are good:
> @@ -281,20 +281,20 @@ static int note_tree_insert(struct int_node *tree,
> unsigned char n, /* Free the entire notes data contained in the given
> tree */
> static void note_tree_free(struct int_node *tree)
> {
> - if (tree->magic == (void *) ~0) {
> - if (tree->prev) {
> - note_tree_free(tree->prev);
> - free(tree->prev);
> + if (tree->u.s.magic == (void *) ~0) {
> + if (tree->u.s.prev) {
> + note_tree_free(tree->u.s.prev);
> + free(tree->u.s.prev);
> }
> - if (tree->child) {
> - note_tree_free(tree->child);
> - free(tree->child);
> + if (tree->u.s.magic) {
> + note_tree_free(tree->u.s.magic);
> + free(tree->u.s.magic);
Here, you are replacing tree->child with tree->u.s.magic. Shouldn't that be
tree->u.s.child instead?
> @@ -439,12 +439,12 @@ static void load_date_subtree(struct tree_desc
> *tree_desc, else /* this is the last entry, store directly into node */
> new_node = node;
>
> - new_node->magic = (void *) ~0;
> - new_node->child = NULL;
> - new_node->prev = cur_node;
> - new_node->parent = parent;
> - hashcpy(new_node->tree_sha1, entry.sha1);
> - strcpy(new_node->period, period);
> + new_node->u.s.magic = (void *) ~0;
> + new_node->u.s.magic = NULL;
Same as above: new_node->u.s.child
> + new_node->u.s.prev = cur_node;
> + new_node->u.s.parent = parent;
> + hashcpy(new_node->u.s.tree_sha1, entry.sha1);
> + strcpy(new_node->u.s.period, period);
> cur_node = new_node;
> }
> assert(!cur_node || cur_node == node);
> @@ -552,38 +552,38 @@ static unsigned char *lookup_notes(const struct
> commit *commit) /* Convert commit->date to YYYY-MM-DD format */
> short_date = show_date(commit->date, 0, DATE_SHORT);
>
> - while (node->magic == (void *) ~0) { /* date-based node */
> - int cmp = SUBTREE_DATE_PREFIXCMP(short_date, node->period);
> + while (node->u.s.magic == (void *) ~0) { /* date-based node */
> + int cmp = SUBTREE_DATE_PREFIXCMP(short_date, node->u.s.period);
> if (cmp == 0) {
> /* Search inside child node */
> - if (!node->child) {
> + if (!node->u.s.magic) {
> /* Must unpack child node first */
> - node->child = (struct int_node *)
> + node->u.s.magic = (struct int_node *)
> xcalloc(sizeof(struct int_node), 1);
> - load_subtree(node->tree_sha1,
> - (const unsigned char *) node->period,
> - strlen(node->period), node->child,
> + load_subtree(node->u.s.tree_sha1,
> + (const unsigned char *) node->u.s.period,
> + strlen(node->u.s.period), node->u.s.magic,
> node, -1);
> }
> seen_node = node;
> - node = node->child;
> + node = node->u.s.magic;
Same again, 4 times in the above hunk.
> @@ -591,15 +591,15 @@ static unsigned char *lookup_notes(const struct
> commit *commit) }
> }
> while (cur_node &&
> - SUBTREE_DATE_PREFIXCMP(cur_node->period, seen_node->period) < 0)
> + SUBTREE_DATE_PREFIXCMP(cur_node->u.s.period,
> seen_node->u.s.period) < 0) {
> /*
> * We're about to move cur_node backwards in history. We are
> * unlikely to need this cur_node in the future, so free() it.
> */
> - note_tree_free(cur_node->child);
> - cur_node->child = NULL;
> - cur_node = cur_node->parent;
> + note_tree_free(cur_node->u.s.magic);
> + cur_node->u.s.magic = NULL;
...and another one here.
> + cur_node = cur_node->u.s.parent;
> }
> cur_node = seen_node;
>
But as I said above, you may want to drop 13/14 and 14/14 completely,
instead.
...Johan
--
Johan Herland, <johan@herland.net>
www.herland.net
next prev parent reply other threads:[~2009-09-12 22:34 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-08 2:26 [PATCHv5 00/14] git notes Johan Herland
2009-09-08 2:26 ` [PATCHv5 01/14] Introduce commit notes Johan Herland
2009-09-08 2:26 ` [PATCHv5 02/14] Add a script to edit/inspect notes Johan Herland
2009-09-08 2:26 ` [PATCHv5 03/14] Speed up git notes lookup Johan Herland
2009-09-08 2:26 ` [PATCHv5 04/14] Add an expensive test for git-notes Johan Herland
2009-09-08 2:26 ` [PATCHv5 05/14] Teach "-m <msg>" and "-F <file>" to "git notes edit" Johan Herland
2009-09-08 2:26 ` [PATCHv5 06/14] fast-import: Add support for importing commit notes Johan Herland
2009-09-08 2:26 ` [PATCHv5 07/14] t3302-notes-index-expensive: Speed up create_repo() Johan Herland
2009-09-08 2:26 ` [PATCHv5 08/14] Add flags to get_commit_notes() to control the format of the note string Johan Herland
2009-09-08 2:26 ` [PATCHv5 09/14] Add '%N'-format for pretty-printing commit notes Johan Herland
2009-09-08 2:26 ` [PATCHv5 10/14] Teach notes code to free its internal data structures on request Johan Herland
2009-09-08 2:26 ` [PATCHv5 11/14] Teach the notes lookup code to parse notes trees with various fanout schemes Johan Herland
2009-09-08 2:27 ` [PATCHv5 12/14] Selftests verifying semantics when loading notes trees with various fanouts Johan Herland
2009-09-08 2:27 ` [PATCHv5 13/14] Allow flexible organization of notes trees, using both commit date and SHA1 Johan Herland
2009-09-08 2:27 ` [PATCHv5 14/14] Add test cases for date-based fanouts Johan Herland
2009-09-08 3:12 ` [PATCHv5 00/14] git notes Johan Herland
2009-09-08 4:16 ` Junio C Hamano
2009-09-08 8:54 ` Johan Herland
2009-09-08 9:32 ` Johannes Schindelin
2009-09-08 12:36 ` Johan Herland
2009-09-08 15:53 ` Johannes Schindelin
2009-09-08 22:46 ` Johan Herland
2009-09-10 6:23 ` Stephen R. van den Berg
2009-09-10 9:25 ` Johan Herland
2009-09-08 20:31 ` Junio C Hamano
2009-09-08 21:10 ` Shawn O. Pearce
2009-09-08 21:36 ` Sverre Rabbelier
2009-09-08 21:39 ` Shawn O. Pearce
2009-09-08 21:57 ` Sverre Rabbelier
2009-09-08 21:40 ` Johan Herland
2009-09-12 15:50 ` Johan Herland
2009-09-12 18:11 ` Shawn O. Pearce
2009-09-12 18:35 ` Johan Herland
2009-09-10 14:00 ` Geert Bosch
2009-09-10 14:09 ` Michael J Gruber
2009-09-10 14:12 ` Geert Bosch
2009-09-12 0:11 ` Junio C Hamano
2009-09-12 15:52 ` Johan Herland
2009-09-12 16:08 ` [PATCHv6 " Johan Herland
2009-09-12 16:08 ` [PATCHv6 01/14] Introduce commit notes Johan Herland
2009-09-12 16:08 ` [PATCHv6 02/14] Add a script to edit/inspect notes Johan Herland
2009-09-12 16:08 ` [PATCHv6 03/14] Speed up git notes lookup Johan Herland
2009-09-12 16:08 ` [PATCHv6 04/14] Add an expensive test for git-notes Johan Herland
2009-09-12 16:08 ` [PATCHv6 05/14] Teach "-m <msg>" and "-F <file>" to "git notes edit" Johan Herland
2009-09-12 16:08 ` [PATCHv6 06/14] fast-import: Add support for importing commit notes Johan Herland
2009-09-12 16:08 ` [PATCHv6 07/14] t3302-notes-index-expensive: Speed up create_repo() Johan Herland
2009-09-12 16:08 ` [PATCHv6 08/14] Add flags to get_commit_notes() to control the format of the note string Johan Herland
2009-09-12 16:08 ` [PATCHv6 09/14] Add '%N'-format for pretty-printing commit notes Johan Herland
2009-09-12 16:08 ` [PATCHv6 10/14] Teach notes code to free its internal data structures on request Johan Herland
2009-09-12 18:40 ` Junio C Hamano
2009-09-12 22:21 ` Johan Herland
2009-09-12 16:08 ` [PATCHv6 11/14] Teach the notes lookup code to parse notes trees with various fanout schemes Johan Herland
2009-09-12 16:08 ` [PATCHv6 12/14] Selftests verifying semantics when loading notes trees with various fanouts Johan Herland
2009-09-12 16:08 ` [PATCHv6 13/14] Allow flexible organization of notes trees, using both commit date and SHA1 Johan Herland
2009-09-12 18:41 ` Junio C Hamano
2009-09-12 22:33 ` Johan Herland [this message]
2009-09-12 23:37 ` Junio C Hamano
2009-09-12 16:08 ` [PATCHv6 14/14] Add test cases for various date-based fanouts Johan Herland
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=200909130033.28666.johan@herland.net \
--to=johan@herland.net \
--cc=Johannes.Schindelin@gmx.de \
--cc=chriscool@tuxfamily.org \
--cc=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=spearce@spearce.org \
--cc=tavestbo@trolltech.com \
--cc=trast@student.ethz.ch \
/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).