git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] decorate: use "const struct object"
@ 2008-04-07 13:40 Johannes Schindelin
  2008-04-07 13:41 ` [PATCH 2/2] pretty=format: Add %d to show decoration Johannes Schindelin
  0 siblings, 1 reply; 4+ messages in thread
From: Johannes Schindelin @ 2008-04-07 13:40 UTC (permalink / raw)
  To: git, gitster


We use the object only as key for the decoration, therefore we should
access it as const struct object.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 decorate.c |   10 +++++-----
 decorate.h |    6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/decorate.c b/decorate.c
index 23f6b00..3aee3b7 100644
--- a/decorate.c
+++ b/decorate.c
@@ -6,13 +6,13 @@
 #include "object.h"
 #include "decorate.h"
 
-static unsigned int hash_obj(struct object *obj, unsigned int n)
+static unsigned int hash_obj(const struct object *obj, unsigned int n)
 {
 	unsigned int hash = *(unsigned int *)obj->sha1;
 	return hash % n;
 }
 
-static void *insert_decoration(struct decoration *n, struct object *base, void *decoration)
+static void *insert_decoration(struct decoration *n, const struct object *base, void *decoration)
 {
 	int size = n->size;
 	struct object_decoration *hash = n->hash;
@@ -47,7 +47,7 @@ static void grow_decoration(struct decoration *n)
 	n->nr = 0;
 
 	for (i = 0; i < old_size; i++) {
-		struct object *base = old_hash[i].base;
+		const struct object *base = old_hash[i].base;
 		void *decoration = old_hash[i].decoration;
 
 		if (!base)
@@ -58,7 +58,7 @@ static void grow_decoration(struct decoration *n)
 }
 
 /* Add a decoration pointer, return any old one */
-void *add_decoration(struct decoration *n, struct object *obj, void *decoration)
+void *add_decoration(struct decoration *n, const struct object *obj, void *decoration)
 {
 	int nr = n->nr + 1;
 
@@ -68,7 +68,7 @@ void *add_decoration(struct decoration *n, struct object *obj, void *decoration)
 }
 
 /* Lookup a decoration pointer */
-void *lookup_decoration(struct decoration *n, struct object *obj)
+void *lookup_decoration(struct decoration *n, const struct object *obj)
 {
 	int j;
 
diff --git a/decorate.h b/decorate.h
index 1fa4ad9..e732804 100644
--- a/decorate.h
+++ b/decorate.h
@@ -2,7 +2,7 @@
 #define DECORATE_H
 
 struct object_decoration {
-	struct object *base;
+	const struct object *base;
 	void *decoration;
 };
 
@@ -12,7 +12,7 @@ struct decoration {
 	struct object_decoration *hash;
 };
 
-extern void *add_decoration(struct decoration *n, struct object *obj, void *decoration);
-extern void *lookup_decoration(struct decoration *n, struct object *obj);
+extern void *add_decoration(struct decoration *n, const struct object *obj, void *decoration);
+extern void *lookup_decoration(struct decoration *n, const struct object *obj);
 
 #endif
-- 
1.5.5.rc0.208.g1d50

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] pretty=format: Add %d to show decoration
  2008-04-07 13:40 [PATCH 1/2] decorate: use "const struct object" Johannes Schindelin
@ 2008-04-07 13:41 ` Johannes Schindelin
  2008-04-09 21:40   ` René Scharfe
  2008-04-10  8:39   ` Junio C Hamano
  0 siblings, 2 replies; 4+ messages in thread
From: Johannes Schindelin @ 2008-04-07 13:41 UTC (permalink / raw)
  To: git, gitster


With this patch, "git log --decorate --pretty=format:%d", shows the
name decoration (i.e. whenever a commit matches a ref, that ref's name
is shown).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---

	Maybe %d should expand to " (<name decoration>)" instead of
	"<name decoration>"?

 Documentation/pretty-formats.txt |    1 +
 pretty.c                         |    9 +++++++++
 2 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
index e8bea3e..9d8a8d4 100644
--- a/Documentation/pretty-formats.txt
+++ b/Documentation/pretty-formats.txt
@@ -117,6 +117,7 @@ The placeholders are:
 - '%e': encoding
 - '%s': subject
 - '%b': body
+- '%d': decoration (needs --decorate)
 - '%Cred': switch color to red
 - '%Cgreen': switch color to green
 - '%Cblue': switch color to blue
diff --git a/pretty.c b/pretty.c
index 6c04176..37f7c3e 100644
--- a/pretty.c
+++ b/pretty.c
@@ -489,6 +489,15 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
 			return 3;
 		} else
 			return 0;
+	case 'd':
+		{
+			struct name_decoration *decoration =
+				lookup_decoration(&name_decoration,
+				&commit->object);
+			if (decoration)
+				strbuf_addstr(sb, decoration->name);
+			return 1;
+		}
 	}
 
 	/* these depend on the commit */
-- 
1.5.5.rc0.208.g1d50

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] pretty=format: Add %d to show decoration
  2008-04-07 13:41 ` [PATCH 2/2] pretty=format: Add %d to show decoration Johannes Schindelin
@ 2008-04-09 21:40   ` René Scharfe
  2008-04-10  8:39   ` Junio C Hamano
  1 sibling, 0 replies; 4+ messages in thread
From: René Scharfe @ 2008-04-09 21:40 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git, gitster

Johannes Schindelin schrieb:
> With this patch, "git log --decorate --pretty=format:%d", shows the 
> name decoration (i.e. whenever a commit matches a ref, that ref's 
> name is shown).

Cute idea. :)

What about objects with multiple decoration?  How about producing a
comma-separated list like git-log does?

How about making %d imply --decorate?  You could load the decorations
lazily when it's first encountered.

> Maybe %d should expand to " (<name decoration>)" instead of "<name 
> decoration>"?

foobar2000 (http://foobar2000.org/) has a kind of music tagging
language, and one of its features might be interesting for us here: you
can group a placeholder and other stuff inside brackets.  The construct
resolves to an empty string if the placeholder is NULL, i.e. in your
example "[ (%d)]" would resolve to either " (the decoration)" or "",
depending on the object having a decoration or not.  (It might be a
better fit for --pretty=format: to use %[ and %].)

By the way, your patch reminds me that I wanted to add a placeholder for
git-describe's output.  I doubt I'll find time for that in the near
future, though..

René

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] pretty=format: Add %d to show decoration
  2008-04-07 13:41 ` [PATCH 2/2] pretty=format: Add %d to show decoration Johannes Schindelin
  2008-04-09 21:40   ` René Scharfe
@ 2008-04-10  8:39   ` Junio C Hamano
  1 sibling, 0 replies; 4+ messages in thread
From: Junio C Hamano @ 2008-04-10  8:39 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

> With this patch, "git log --decorate --pretty=format:%d", shows the
> name decoration (i.e. whenever a commit matches a ref, that ref's name
> is shown).
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>
> 	Maybe %d should expand to " (<name decoration>)" instead of
> 	"<name decoration>"?

Not necessarily.  %d in --pretty="format:%h%d %s" may want to expand to
"(<name>) " instead of " (<name>)".

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2008-04-10  8:40 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-07 13:40 [PATCH 1/2] decorate: use "const struct object" Johannes Schindelin
2008-04-07 13:41 ` [PATCH 2/2] pretty=format: Add %d to show decoration Johannes Schindelin
2008-04-09 21:40   ` René Scharfe
2008-04-10  8:39   ` Junio C Hamano

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).