All of lore.kernel.org
 help / color / mirror / Atom feed
* modifier_string() inconsistency with modifiers
@ 2010-08-20 10:33 Bernd Petrovitsch
  2010-08-20 23:03 ` Christopher Li
  0 siblings, 1 reply; 8+ messages in thread
From: Bernd Petrovitsch @ 2010-08-20 10:33 UTC (permalink / raw)
  To: linux-sparse

Hi all!

To dump/print the modifiers, I just found the
modifier_string() function (in show-parse.c).

To the best of my understanding
----  snip  ----
	const char *res,**ptr, *names[] = {
		"auto", "register", "static", "extern",
		"const", "volatile", "[signed]", "[unsigned]",
		"[char]", "[short]", "[long]", "[long long]",
		"[typdef]", "[structof]", "[unionof]", "[enum]",
		"[typeof]", "[attribute]", "inline", "[addressable]",
		"[nocast]", "[noderef]", "[accessed]", "[toplevel]",
		"[label]", "[assigned]", "[type]", "[safe]",
		"[usertype]", "[force]", "[explicitly-signed]",
		NULL
	};
----  snip  ----
lists printable strings for the modifiers. The modifiers are bits
defined in symbol.h.
----  snip  ----
/* Modifiers */
#define MOD_AUTO	0x0001
#define MOD_REGISTER	0x0002
#define MOD_STATIC	0x0004
#define MOD_EXTERN	0x0008

#define MOD_CONST	0x0010
#define MOD_VOLATILE	0x0020
#define MOD_SIGNED	0x0040
#define MOD_UNSIGNED	0x0080

#define MOD_CHAR	0x0100
#define MOD_SHORT	0x0200
#define MOD_LONG	0x0400
#define MOD_LONGLONG	0x0800

#define MOD_TYPEDEF	0x1000
#define MOD_WEAK	0x2000

#define MOD_INLINE	0x40000
#define MOD_ADDRESSABLE	0x80000

#define MOD_NOCAST	0x100000
#define MOD_NODEREF	0x200000
#define MOD_ACCESSED	0x400000
#define MOD_TOPLEVEL	0x800000	// scoping..

#define MOD_LABEL	0x1000000
#define MOD_ASSIGNED	0x2000000
#define MOD_TYPE	0x4000000
#define MOD_SAFE	0x8000000	// non-null/non-trapping pointer

#define MOD_USERTYPE	0x10000000
#define MOD_FORCE	0x20000000
#define MOD_EXPLICITLY_SIGNED	0x40000000
#define MOD_BITWISE	0x80000000
----  snip  ----
Well, the equivalent for "MOD_WEAK" is "[structof]" - which seems wrong
to me.
And the parts for "inline" also doesn't fit AFAICS.

What did I actually miss?

	Bernd
-- 
mobile: +43 664 4416156              http://www.sysprog.at/
    Linux Software Development, Consulting and Services


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

* Re: modifier_string() inconsistency with modifiers
  2010-08-20 10:33 modifier_string() inconsistency with modifiers Bernd Petrovitsch
@ 2010-08-20 23:03 ` Christopher Li
  2010-08-22  8:42   ` Bernd Petrovitsch
  0 siblings, 1 reply; 8+ messages in thread
From: Christopher Li @ 2010-08-20 23:03 UTC (permalink / raw)
  To: Bernd Petrovitsch; +Cc: linux-sparse

On Fri, Aug 20, 2010 at 3:33 AM, Bernd Petrovitsch <bernd@sysprog.at> wrote:
>
> Well, the equivalent for "MOD_WEAK" is "[structof]" - which seems wrong
> to me.
> And the parts for "inline" also doesn't fit AFAICS.
>
> What did I actually miss?

Nothing. We remove some bits from the modifier but forget to update
the modifier_string function.

Care for a patch?

Chris

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

* Re: modifier_string() inconsistency with modifiers
  2010-08-20 23:03 ` Christopher Li
@ 2010-08-22  8:42   ` Bernd Petrovitsch
  2010-08-22 17:25     ` Christopher Li
  0 siblings, 1 reply; 8+ messages in thread
From: Bernd Petrovitsch @ 2010-08-22  8:42 UTC (permalink / raw)
  To: Christopher Li; +Cc: linux-sparse

On Fre, 2010-08-20 at 16:03 -0700, Christopher Li wrote:
> On Fri, Aug 20, 2010 at 3:33 AM, Bernd Petrovitsch <bernd@sysprog.at> wrote:
> >
> > Well, the equivalent for "MOD_WEAK" is "[structof]" - which seems wrong
> > to me.
> > And the parts for "inline" also doesn't fit AFAICS.
> >
> > What did I actually miss?
> 
> Nothing. We remove some bits from the modifier but forget to update
> the modifier_string function.
> 
> Care for a patch?

Not a big problem.
Hmm, is it prudent to use c99, e.g. for named initializers und array?

	Bernd
-- 
mobile: +43 664 4416156              http://www.sysprog.at/
    Linux Software Development, Consulting and Services


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

* Re: modifier_string() inconsistency with modifiers
  2010-08-22  8:42   ` Bernd Petrovitsch
@ 2010-08-22 17:25     ` Christopher Li
  2010-08-23 14:42       ` [PATCH] Fixup and cleanup of the modifier_string() function (was Re: modifier_string() inconsistency with modifiers) Bernd Petrovitsch
  0 siblings, 1 reply; 8+ messages in thread
From: Christopher Li @ 2010-08-22 17:25 UTC (permalink / raw)
  To: Bernd Petrovitsch; +Cc: linux-sparse

On Sun, Aug 22, 2010 at 1:42 AM, Bernd Petrovitsch <bernd@sysprog.at> wrote:
> Not a big problem.
> Hmm, is it prudent to use c99, e.g. for named initializers und array?
>
Not at all. Sparse use c99 extensively.

Chris

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

* [PATCH] Fixup and cleanup of the modifier_string() function (was Re: modifier_string() inconsistency with modifiers)
  2010-08-22 17:25     ` Christopher Li
@ 2010-08-23 14:42       ` Bernd Petrovitsch
  2010-09-03  9:13         ` Christopher Li
  0 siblings, 1 reply; 8+ messages in thread
From: Bernd Petrovitsch @ 2010-08-23 14:42 UTC (permalink / raw)
  To: Christopher Li; +Cc: linux-sparse

Fixup and cleanup of the modifier_string() function

This patch does:
- it fixes the modifier_string() function
- The array with the names is made "static".
- We use C99-indexed initializers. For this we add a set of
  #defines with the bit number.
- replace the open-coded string copy without length check
  with a snprintf()-based one.

Signed-off-by: Bernd Petrovitsch <bernd@sysprog.at>
---
 show-parse.c |   63 +++++++++++++++++++++++-----------
 symbol.h     |  106 +++++++++++++++++++++++++++++++++++++++-------------------
 2 files changed, 114 insertions(+), 55 deletions(-)

diff --git a/show-parse.c b/show-parse.c
index b771018..34227b4 100644
--- a/show-parse.c
+++ b/show-parse.c
@@ -94,31 +94,54 @@ void debug_symbol(struct symbol *sym)
  */
 const char *modifier_string(unsigned long mod)
 {
+	static const char *names[] = {
+		[MOD_AUTO_BIT]			= "auto",
+		[MOD_REGISTER_BIT]		= "register",
+		[MOD_STATIC_BIT]		= "static",
+		[MOD_EXTERN_BIT]		= "extern",
+
+		[MOD_CONST_BIT]			= "const",
+		[MOD_VOLATILE_BIT]		= "volatile",
+		[MOD_SIGNED_BIT]		= "[signed]",
+		[MOD_UNSIGNED_BIT]		= "[unsigned]",
+
+		[MOD_CHAR_BIT]			= "[char]",
+		[MOD_SHORT_BIT]			= "[short]",
+		[MOD_LONG_BIT]			= "[long]",
+		[MOD_LONGLONG_BIT]		= "[long long]",
+
+		[MOD_TYPEDEF_BIT]		= "[typedef]",
+		[MOD_WEAK_BIT]			= "[weak]",
+
+		[MOD_INLINE_BIT]		= "inline",
+		[MOD_ADDRESSABLE_BIT]		= "[addressable]",
+
+		[MOD_NOCAST_BIT]		= "[nocast]",
+		[MOD_NODEREF_BIT]		= "[noderef]",
+		[MOD_ACCESSED_BIT]		= "[accessed]",
+		[MOD_TOPLEVEL_BIT]		= "[toplevel]",
+
+		[MOD_LABEL_BIT]			= "[label]",
+		[MOD_ASSIGNED_BIT]		= "[assigned]",
+		[MOD_TYPE_BIT]			= "[type]",
+		[MOD_SAFE_BIT]			= "[safe]",
+
+		[MOD_USERTYPE_BIT]		= "[usertype]",
+		[MOD_FORCE_BIT]			= "[force]",
+		[MOD_EXPLICITLY_SIGNED_BIT]	= "[explicitly-signed]",
+		[MOD_BITWISE_BIT]		= "[bitwise]",
+        };
 	static char buffer[100];
-	char *p = buffer;
-	const char *res,**ptr, *names[] = {
-		"auto", "register", "static", "extern",
-		"const", "volatile", "[signed]", "[unsigned]",
-		"[char]", "[short]", "[long]", "[long long]",
-		"[typedef]", "[structof]", "[unionof]", "[enum]",
-		"[typeof]", "[attribute]", "inline", "[addressable]",
-		"[nocast]", "[noderef]", "[accessed]", "[toplevel]",
-		"[label]", "[assigned]", "[type]", "[safe]",
-		"[usertype]", "[force]", "[explicitly-signed]",
-		NULL
-	};
-	ptr = names;
-	while ((res = *ptr++) != NULL) {
+	int len = 0;
+        unsigned int i;
+
+	for (i = 0; i < sizeof(names)/sizeof(names[0]) && len < sizeof(buffer); i++) {
 		if (mod & 1) {
-			char c;
-			while ((c = *res++) != '\0')
-				*p++ = c;
-			*p++ = ' ';
+			len += snprintf(buffer+len, sizeof(buffer)-len, " %s", names[i]);
 		}
 		mod >>= 1;
 	}
-	*p = 0;
-	return buffer;
+	return buffer+1; /* hide the first space */
 }
 
 static void show_struct_member(struct symbol *sym)
diff --git a/symbol.h b/symbol.h
index b3fcccd..b66e2a1 100644
--- a/symbol.h
+++ b/symbol.h
@@ -169,41 +169,77 @@ struct symbol {
 };
 
 /* Modifiers */
-#define MOD_AUTO	0x0001
-#define MOD_REGISTER	0x0002
-#define MOD_STATIC	0x0004
-#define MOD_EXTERN	0x0008
-
-#define MOD_CONST	0x0010
-#define MOD_VOLATILE	0x0020
-#define MOD_SIGNED	0x0040
-#define MOD_UNSIGNED	0x0080
-
-#define MOD_CHAR	0x0100
-#define MOD_SHORT	0x0200
-#define MOD_LONG	0x0400
-#define MOD_LONGLONG	0x0800
-
-#define MOD_TYPEDEF	0x1000
-#define MOD_WEAK	0x2000
-
-#define MOD_INLINE	0x40000
-#define MOD_ADDRESSABLE	0x80000
-
-#define MOD_NOCAST	0x100000
-#define MOD_NODEREF	0x200000
-#define MOD_ACCESSED	0x400000
-#define MOD_TOPLEVEL	0x800000	// scoping..
-
-#define MOD_LABEL	0x1000000
-#define MOD_ASSIGNED	0x2000000
-#define MOD_TYPE	0x4000000
-#define MOD_SAFE	0x8000000	// non-null/non-trapping pointer
-
-#define MOD_USERTYPE	0x10000000
-#define MOD_FORCE	0x20000000
-#define MOD_EXPLICITLY_SIGNED	0x40000000
-#define MOD_BITWISE	0x80000000
+#define MOD_AUTO_BIT			 0
+#define MOD_REGISTER_BIT		 1
+#define MOD_STATIC_BIT			 2
+#define MOD_EXTERN_BIT			 3
+
+#define MOD_CONST_BIT			 4
+#define MOD_VOLATILE_BIT		 5
+#define MOD_SIGNED_BIT			 6
+#define MOD_UNSIGNED_BIT		 7
+
+#define MOD_CHAR_BIT			 8
+#define MOD_SHORT_BIT			 9
+#define MOD_LONG_BIT			10
+#define MOD_LONGLONG_BIT		11
+
+#define MOD_TYPEDEF_BIT			12
+#define MOD_WEAK_BIT			13
+#define MOD_INLINE_BIT			14
+#define MOD_ADDRESSABLE_BIT		15
+
+#define MOD_NOCAST_BIT			16
+#define MOD_NODEREF_BIT			17
+#define MOD_ACCESSED_BIT		18
+#define MOD_TOPLEVEL_BIT		19		// scoping..
+
+#define MOD_LABEL_BIT			20
+#define MOD_ASSIGNED_BIT		21
+#define MOD_TYPE_BIT			22
+#define MOD_SAFE_BIT			23		// non-null/non-trapping pointer
+
+#define MOD_USERTYPE_BIT		24
+#define MOD_FORCE_BIT			25
+#define MOD_EXPLICITLY_SIGNED_BIT	26
+#define MOD_BITWISE_BIT			27
+
+/* use the following in the code - we need the above to initialize an array */
+#define MOD_AUTO		(1 << MOD_AUTO_BIT)
+#define MOD_REGISTER		(1 << MOD_REGISTER_BIT)
+#define MOD_STATIC		(1 << MOD_STATIC_BIT)
+#define MOD_EXTERN		(1 << MOD_EXTERN_BIT)
+
+#define MOD_CONST		(1 << MOD_CONST_BIT)
+#define MOD_VOLATILE		(1 << MOD_VOLATILE_BIT)
+#define MOD_SIGNED		(1 << MOD_SIGNED_BIT)
+#define MOD_UNSIGNED		(1 << MOD_UNSIGNED_BIT)
+
+#define MOD_CHAR		(1 << MOD_CHAR_BIT)
+#define MOD_SHORT		(1 << MOD_SHORT_BIT)
+#define MOD_LONG		(1 << MOD_LONG_BIT)
+#define MOD_LONGLONG		(1 << MOD_LONGLONG_BIT)
+
+#define MOD_TYPEDEF		(1 << MOD_TYPEDEF_BIT)
+#define MOD_WEAK		(1 << MOD_WEAK_BIT)
+
+#define MOD_INLINE		(1 << MOD_INLINE_BIT)
+#define MOD_ADDRESSABLE		(1 << MOD_ADDRESSABLE_BIT)
+
+#define MOD_NOCAST		(1 << MOD_NOCAST_BIT)
+#define MOD_NODEREF		(1 << MOD_NODEREF_BIT)
+#define MOD_ACCESSED		(1 << MOD_ACCESSED_BIT)
+#define MOD_TOPLEVEL		(1 << MOD_TOPLEVEL_BIT)
+
+#define MOD_LABEL		(1 << MOD_LABEL_BIT)
+#define MOD_ASSIGNED		(1 << MOD_ASSIGNED_BIT)
+#define MOD_TYPE		(1 << MOD_TYPE_BIT)
+#define MOD_SAFE		(1 << MOD_SAFE_BIT)
+
+#define MOD_USERTYPE		(1 << MOD_USERTYPE_BIT)
+#define MOD_FORCE		(1 << MOD_FORCE_BIT)
+#define MOD_EXPLICITLY_SIGNED	(1 << MOD_EXPLICITLY_SIGNED_BIT)
+#define MOD_BITWISE		(1 << MOD_BITWISE_BIT)
 
 #define MOD_NONLOCAL	(MOD_EXTERN | MOD_TOPLEVEL)
 #define MOD_STORAGE	(MOD_AUTO | MOD_REGISTER | MOD_STATIC | MOD_EXTERN | MOD_INLINE | MOD_TOPLEVEL | MOD_FORCE | MOD_WEAK)

-- 
mobile: +43 664 4416156              http://www.sysprog.at/
    Linux Software Development, Consulting and Services


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

* Re: [PATCH] Fixup and cleanup of the modifier_string() function (was Re: modifier_string() inconsistency with modifiers)
  2010-08-23 14:42       ` [PATCH] Fixup and cleanup of the modifier_string() function (was Re: modifier_string() inconsistency with modifiers) Bernd Petrovitsch
@ 2010-09-03  9:13         ` Christopher Li
  2010-09-14 14:37           ` [PATCH] Fixup and cleanup of the modifier_string() function Bernd Petrovitsch
  0 siblings, 1 reply; 8+ messages in thread
From: Christopher Li @ 2010-09-03  9:13 UTC (permalink / raw)
  To: Bernd Petrovitsch; +Cc: linux-sparse

[-- Attachment #1: Type: text/plain, Size: 776 bytes --]

On Mon, Aug 23, 2010 at 7:42 AM, Bernd Petrovitsch <bernd@sysprog.at> wrote:
> Fixup and cleanup of the modifier_string() function
>
> This patch does:
> - it fixes the modifier_string() function
> - The array with the names is made "static".


Sorry for the late reply.

Your patch does not apply to the chrisl repository. I also notice that
if modifier
is zero, it will return buffer without initialized. Well the modifier
is not supposed
to be zero, but still.

Another thing in the patch is that I don't want to move the modifier
bits for just the debug
function. It is expected to have more change in the modifier bits. How about
this patch? I start with your patch and end up like this.

If that works for you, please sign it off and I will check it in.

Thanks,

Chris

[-- Attachment #2: mod-string.patch --]
[-- Type: application/octet-stream, Size: 2198 bytes --]

diff --git a/show-parse.c b/show-parse.c
index d7b502d..c97debe 100644
--- a/show-parse.c
+++ b/show-parse.c
@@ -95,29 +95,55 @@ void debug_symbol(struct symbol *sym)
 const char *modifier_string(unsigned long mod)
 {
 	static char buffer[100];
-	char *p = buffer;
-	const char *res,**ptr, *names[] = {
-		"auto", "register", "static", "extern",
-		"const", "volatile", "[signed]", "[unsigned]",
-		"[char]", "[short]", "[long]", "[long long]",
-		"[typedef]", "[structof]", "[unionof]", "[enum]",
-		"[typeof]", "[attribute]", "inline", "[addressable]",
-		"[nocast]", "[noderef]", "[accessed]", "[toplevel]",
-		"[label]", "[assigned]", "[type]", "[safe]",
-		"[usertype]", "[force]", "[explicitly-signed]",
-		NULL
+	int len = 0;
+	int i;
+	struct mod_name {
+		unsigned long mod;
+		const char *name;
+	} *m;
+
+	static struct mod_name mod_names[] = {
+		{MOD_AUTO,		"auto"},
+		{MOD_REGISTER,		"register"},
+		{MOD_STATIC,		"static"},
+		{MOD_EXTERN,		"extern"},
+		{MOD_CONST,		"const"},
+		{MOD_VOLATILE,		"volatile"},
+		{MOD_SIGNED,		"[signed]"},
+		{MOD_UNSIGNED,		"[unsigned]"},
+		{MOD_CHAR,		"[char]"},
+		{MOD_SHORT,		"[short]"},
+		{MOD_LONG,		"[long]"},
+		{MOD_LONGLONG,		"[long long]"},
+		{MOD_LONGLONGLONG,	"[long long long]"},
+		{MOD_TYPEDEF,		"[typedef]"},
+		{MOD_TLS,		"[tls]"},
+		{MOD_INLINE,		"inline"},
+		{MOD_ADDRESSABLE,	"[addressable]"},
+		{MOD_NOCAST,		"[nocast]"},
+		{MOD_NODEREF,		"[noderef]"},
+		{MOD_ACCESSED,		"[accessed]"},
+		{MOD_TOPLEVEL,		"[toplevel]"},
+		{MOD_ASSIGNED,		"[assigned]"},
+		{MOD_TYPE,		"[type]"},
+		{MOD_SAFE,		"[safe]"},
+		{MOD_USERTYPE,		"[usertype]"},
+		{MOD_NORETURN,		"[noreturn]"},
+		{MOD_EXPLICITLY_SIGNED,	"[explicitly-signed]"},
+		{MOD_BITWISE,		"[bitwise]"},
 	};
-	ptr = names;
-	while ((res = *ptr++) != NULL) {
-		if (mod & 1) {
+
+	for (i = 0; i < ARRAY_SIZE(mod_names); i++) {
+		m = mod_names + i;
+		if (mod & m->mod) {
 			char c;
-			while ((c = *res++) != '\0')
-				*p++ = c;
-			*p++ = ' ';
+			const char *name = m->name;
+			while ((c = *name++) != '\0' && len + 2 < sizeof buffer)
+				buffer[len++] = c;
+			buffer[len++] = ' ';
 		}
-		mod >>= 1;
 	}
-	*p = 0;
+	buffer[len] = 0;
 	return buffer;
 }
 

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

* Re: [PATCH] Fixup and cleanup of the modifier_string() function
  2010-09-03  9:13         ` Christopher Li
@ 2010-09-14 14:37           ` Bernd Petrovitsch
  2010-09-15 22:52             ` Christopher Li
  0 siblings, 1 reply; 8+ messages in thread
From: Bernd Petrovitsch @ 2010-09-14 14:37 UTC (permalink / raw)
  To: Christopher Li; +Cc: linux-sparse

On Fre, 2010-09-03 at 02:13 -0700, Christopher Li wrote:
> On Mon, Aug 23, 2010 at 7:42 AM, Bernd Petrovitsch <bernd@sysprog.at> wrote:
> > Fixup and cleanup of the modifier_string() function
> >
> > This patch does:
> > - it fixes the modifier_string() function
> > - The array with the names is made "static".
> 
> Sorry for the late reply.

No problem - August is holiday time (at least hereover) and if there are
more pressing issues.

> Your patch does not apply to the chrisl repository. I also notice that

They were against git://git.kernel.org/pub/scm/devel/sparse/sparse.git
which is listed on https://sparse.wiki.kernel.org/index.php/Main_Page.
But your patch doesn't apply against it. And it doesn't apply against
git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git - which
looks at the first glance identical to the above.

I found http://marc.info/?l=linux-sparse&m=126634898432123 but there is
no "chrisl" branch - at least not in the output of `git branch -a`.
What I'm doing wrong?

> if modifier
> is zero, it will return buffer without initialized. Well the modifier

Ooops, ACK.
Grrml, not the first time in my life that I forgot that.

> is not supposed
> to be zero, but still.
> 
> Another thing in the patch is that I don't want to move the modifier
> bits for just the debug
> function. It is expected to have more change in the modifier bits. How about
> this patch? I start with your patch and end up like this.

Yes, the associative array is the better solution.
And the buffer overflow is also fixed.

> If that works for you, please sign it off and I will check it in.

It works for me.
Signed-off-by: Bernd Petrovitsch <bernd@sysprog.at>

	Bernd
-- 
mobile: +43 664 4416156              http://www.sysprog.at/
    Linux Software Development, Consulting and Services


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

* Re: [PATCH] Fixup and cleanup of the modifier_string() function
  2010-09-14 14:37           ` [PATCH] Fixup and cleanup of the modifier_string() function Bernd Petrovitsch
@ 2010-09-15 22:52             ` Christopher Li
  0 siblings, 0 replies; 8+ messages in thread
From: Christopher Li @ 2010-09-15 22:52 UTC (permalink / raw)
  To: Bernd Petrovitsch; +Cc: linux-sparse

On Tue, Sep 14, 2010 at 7:37 AM, Bernd Petrovitsch <bernd@sysprog.at> wrote:
> They were against git://git.kernel.org/pub/scm/devel/sparse/sparse.git
> which is listed on https://sparse.wiki.kernel.org/index.php/Main_Page.
> But your patch doesn't apply against it. And it doesn't apply against
> git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git - which
> looks at the first glance identical to the above.
>

I think there is some thing wrong in your git setup. May be you did not
checkout the right branch? You can always visit the web link to see
if that match your local "git log".

http://git.kernel.org/?p=devel/sparse/chrisl/sparse.git;a=summary

> I found http://marc.info/?l=linux-sparse&m=126634898432123 but there is
> no "chrisl" branch - at least not in the output of `git branch -a`.
> What I'm doing wrong?

Have your try to clone a clean repository in a new directory?

git clone git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git

That should give you a clean local copy of "chrisl" repository.

There is a better way to deal with remote branch in one git repository.
If you add those to your .git/config:

[remote "chrisl"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git
[branch "chrisl"]
        remote = chrisl
        merge = refs/heads/master

You should be able to do:

git fetch chrisl
git checkout chrisl

To get the chrisl branch.

> Signed-off-by: Bernd Petrovitsch <bernd@sysprog.at>

Thanks. The change is pushed.

Chris

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

end of thread, other threads:[~2010-09-15 22:53 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-20 10:33 modifier_string() inconsistency with modifiers Bernd Petrovitsch
2010-08-20 23:03 ` Christopher Li
2010-08-22  8:42   ` Bernd Petrovitsch
2010-08-22 17:25     ` Christopher Li
2010-08-23 14:42       ` [PATCH] Fixup and cleanup of the modifier_string() function (was Re: modifier_string() inconsistency with modifiers) Bernd Petrovitsch
2010-09-03  9:13         ` Christopher Li
2010-09-14 14:37           ` [PATCH] Fixup and cleanup of the modifier_string() function Bernd Petrovitsch
2010-09-15 22:52             ` Christopher Li

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.