Git development
 help / color / mirror / Atom feed
* Re: [PATCH] Add missing inside_work_tree setting in setup_git_directory_gently
From: Johannes Schindelin @ 2007-11-09 11:32 UTC (permalink / raw)
  To: Nguyen Thai Ngoc Duy; +Cc: Junio C Hamano, git
In-Reply-To: <20071104070307.GA26071@laptop>

[-- Attachment #1: Type: TEXT/PLAIN, Size: 2323 bytes --]

Hi,

On Sun, 4 Nov 2007, Nguyen Thai Ngoc Duy wrote:

> On Sat, Nov 03, 2007 at 09:33:40PM -0700, Junio C Hamano wrote:
> > Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
> > 
> > > When both GIT_DIR and GIT_WORK_TREE are set, and
> > > setup_git_directory_gently() changes the current working
> > > directory accordingly, it should also set inside_work_tree = 1.
> > >
> > > Without this, work_tree handling code in setup_git_directory()
> > > will be activated. If you stay in root work tree (no prefix),
> > > it does not harm. It does if you work from a subdirectory though.
> > 
> > Please add automated test script for this, thanks.
> > 
> 
> Thank you for reminding.  I tried to put a test in
> t1501-worktree.sh and found out core.worktree can override
> inside_work_tree previously set by setup_git_directory_gently(),
> activating the worktree code in setup_git_directory() again.
> 
> This made me think setup_git_directory_gently() should use
> get_git_work_tree() instead. But then git_work_tree_cfg may not be
> initialized when get_git_work_tree() is called (starting from
> setup_git_directory(), git_work_tree_cfg is initialized in
> check_repository_format_version(), which is called _after_
> setup_git_directory_gently()).
> 
> The interaction between these variables and functions is really beyond
> my knowledge. Johannes, can you have a look at this? In theory the
> following test should pass:
> 
> diff --git a/t/t1501-worktree.sh b/t/t1501-worktree.sh
> index 7ee3820..bdb7720 100755
> --- a/t/t1501-worktree.sh
> +++ b/t/t1501-worktree.sh
> @@ -103,6 +103,11 @@ test_expect_success 'repo finds its work tree from work tree, too' '
>  	 test sub/dir/tracked = "$(git ls-files)")
>  '
>  
> +test_expect_success 'Try a command from subdir in worktree' '
> +	(cd repo.git/work/sub &&
> +	GIT_DIR=../.. GIT_WORK_TREE=.. git blame dir/tracked)
> +'
> +
>  test_expect_success '_gently() groks relative GIT_DIR & GIT_WORK_TREE' '
>  	cd repo.git/work/sub/dir &&
>  	GIT_DIR=../../.. GIT_WORK_TREE=../.. GIT_PAGER= \

This does not really test work_tree, but if blame uses the work_tree 
machinery correctly.

I will send out a patch to builtin-blame.c in a minute.

However, this test case still fails, since blame needs a HEAD revision!  
And in t1501 there is no commit done yet.

Ciao,
Dscho

^ permalink raw reply

* [PATCH] builtin-blame: set up the work_tree before the first file access
From: Johannes Schindelin @ 2007-11-09 11:34 UTC (permalink / raw)
  To: Nguyen Thai Ngoc Duy; +Cc: Junio C Hamano, git
In-Reply-To: <20071104070307.GA26071@laptop>


We check in cmd_blame() if the specified path is there, but we
failed to set up the working tree before that.

While at it, make setup_work_tree() just return if it was run
before.

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

	IMO both this patch and the recent patch to call setup_work_tree() 
	are needed.  Only the second call to setup_work_tree() will know 
	if there was no revision specified, and the first one will know if 
	a -- has been seen.

 builtin-blame.c |    1 +
 setup.c         |   10 ++++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/builtin-blame.c b/builtin-blame.c
index 55a3c0b..ba80bf8 100644
--- a/builtin-blame.c
+++ b/builtin-blame.c
@@ -2295,6 +2295,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
 			else if (i != argc - 1)
 				usage(blame_usage); /* garbage at end */
 
+			setup_work_tree();
 			if (!has_path_in_work_tree(path))
 				die("cannot stat path %s: %s",
 				    path, strerror(errno));
diff --git a/setup.c b/setup.c
index 084d722..1421a2c 100644
--- a/setup.c
+++ b/setup.c
@@ -207,12 +207,18 @@ static const char *set_work_tree(const char *dir)
 }
 
 void setup_work_tree(void) {
-	const char *work_tree = get_git_work_tree();
-	const char *git_dir = get_git_dir();
+	const char *work_tree, *git_dir;
+	static int initialized = 0;
+
+	if (initialized)
+		return;
+	work_tree = get_git_work_tree();
+	git_dir = get_git_dir();
 	if (!is_absolute_path(git_dir))
 		set_git_dir(make_absolute_path(git_dir));
 	if (!work_tree || chdir(work_tree))
 		die("This operation must be run in a work tree");
+	initialized = 1;
 }
 
 /*
-- 
1.5.3.5.1645.g1f4df

^ permalink raw reply related

* [PATCH] gitk: Use a different background color for the active head.
From: Marco Colombo @ 2007-11-09 11:21 UTC (permalink / raw)
  To: git

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



[-- Attachment #2: 0001-gitk-Use-a-different-background-color-for-the-activ.patch --]
[-- Type: text/x-patch, Size: 890 bytes --]

>From 7c7a8f6dbe5c4f96ddbc508fa4ab9c2dbae56d82 Mon Sep 17 00:00:00 2001
From: Marco Colombo <m.colombo@ed.ac.uk>
Date: Fri, 9 Nov 2007 10:19:01 +0000
Subject: [PATCH] gitk: Use a different background color for the active head.

Currently the background color of all heads is green. The active head is
distinguished only by the use of a bold font. This patch changes the
background color of the active head to orange, thus making it
visually more separate from the other heads.

Signed-off-by: Marco Colombo <m.colombo@ed.ac.uk>
---
 gitk |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/gitk b/gitk
index 1da0b0a..dacbc31 100755
--- a/gitk
+++ b/gitk
@@ -4038,6 +4038,7 @@ proc drawtags {id x xt y1} {
 	    if {[incr nheads -1] >= 0} {
 		set col green
 		if {$tag eq $mainhead} {
+		    set col orange
 		    set font mainfontbold
 		}
 	    } else {
-- 
1.5.3.4


^ permalink raw reply related

* RE: corrupt object on git-gc
From: Yossi Leybovich @ 2007-11-09 12:16 UTC (permalink / raw)
  To: Christian Couder; +Cc: git
In-Reply-To: <200711090613.17566.chriscool@tuxfamily.org>


Just tried it :

sleybo@SLEYBO-LT /w/work/EMC/ib.071030.001/ib
$ git-cat-file.exe -p 4b9458b3786228369c63936db65827de3cc06200
error: corrupt loose object '4b9458b3786228369c63936db65827de3cc06200'
fatal: Cannot read object 4b9458b3786228369c63936db65827de3cc06200

Is this say something ?

Yossi 

> -----Original Message-----
> From: Christian Couder [mailto:chriscool@tuxfamily.org]
> Sent: Friday, November 09, 2007 12:13 AM
> To: Yossi Leybovich
> Cc: git@vger.kernel.org
> Subject: Re: corrupt object on git-gc
> 
> Le vendredi 9 novembre 2007, Yossi Leybovich a écrit :
> >
> > Unfortunately I can't get this object from backup directories as
> advise
> > in the FAQ.
> > Can this object manually fixed by any tool? (the object is attached)
> I
> > don't even know to which file/tree/commit it belong how can I know
> that
> > ?
> 
> Could you try something like:
> 
> git-cat-file -p 4b9458b3786228369c63936db65827de3cc06200
> 
> in your repository ?
> 
> Thanks,
> Christian.

^ permalink raw reply

* RE: corrupt object on git-gc
From: Yossi Leybovich @ 2007-11-09 12:23 UTC (permalink / raw)
  To: Alex Riesen; +Cc: git
In-Reply-To: <20071109081035.GA2794@steel.home>

Hi

 I know its loose but still I think there are references in the
repository to this object.
How I can remove it from the repository ?


sleybo@SLEYBO-LT /w/work/EMC/ib.071030.001/ib
$ mv .git/objects/4b ..

sleybo@SLEYBO-LT /w/work/EMC/ib.071030.001/ib
$ git-fsck --full
broken link from    tree ca8022a21a064d075d71a342744e584024fd2782
              to    blob 4b920d658a05a66a9d18dd34b51d6e3a9f229ce1
broken link from  commit 2ca27acf05f1631586718b68ce43f0a0400e1f9b
              to  commit 4b1aabfe3ecc12007535369a2ba17bcee776df64
dangling commit 0d43a63623237385e432572bf61171713dcd8e98
dangling tree b303c073c5d6c30de761a5ecce39ab30da81e98a
dangling tree f3c333f9756e824e6b51e585d734e410790e7dc5
dangling tree 10a4688d94ab6b1fb1bb3aee7e77255a0e41ae94
broken link from    tree eea47bf0788a38ac0988de26eddafa8d60caaa58
              to    blob 4b920d658a05a66a9d18dd34b51d6e3a9f229ce1
broken link from  commit 06858a6c8d5a6b1ffbc203057d023c48567dd83e
              to    tree 4b89da873ce6e1b36a818d70d4665b3074f2354c
dangling commit 4fc6b1127e4a7f4ff5b65a2dd8a90779b5aff3e0
dangling commit 7da607374fe2b1ae09228d2035dd608c73dad7c8
missing tree 4b89da873ce6e1b36a818d70d4665b3074f2354c
broken link from    tree 380b2b78d10136cc2b6e1578f4906fccb3e432b1
              to    blob 4b920d658a05a66a9d18dd34b51d6e3a9f229ce1>
-----Original Message-----



Thanks
Yossi 




> From: Alex Riesen [mailto:raa.lkml@gmail.com]
> Sent: Friday, November 09, 2007 3:11 AM
> To: Yossi Leybovich
> Cc: git@vger.kernel.org
> Subject: Re: corrupt object on git-gc
> 
> Yossi Leybovich, Fri, Nov 09, 2007 00:59:47 +0100:
> > I wonder if someone can help in this error
> > I tried to do git-gc and got error on corrupted object.
> >
> > I do the following:
> >
> > $ git-gc
> > Generating pack...
> > Done counting 3037 objects.
> > Deltifying 3037 objects...
> > error: corrupt loose object
> '4b9458b3786228369c63936db65827de3cc06200'
> 
> It is loose. Nothing uses it in this repository. What do you need to
> repair it for?
> 
> > fatal: object 4b9458b3786228369c63936db65827de3cc06200 cannot be
read
> > error: failed to run repack
> >
> > sleybo@SLEYBO-LT /w/work/EMC/ib.071030.001/ib
> > $ cd .git/objects/4b/
> >
> > sleybo@SLEYBO-LT /w/work/EMC/ib.071030.001/ib/.git/objects/4b
> > $ git-fsck-objects.exe 9458b3786228369c63936db65827de3cc06200
> > error: corrupt loose object
> '4b9458b3786228369c63936db65827de3cc06200'
> > error: 4b9458b3786228369c63936db65827de3cc06200: object corrupt or
> > missing
> > error: invalid parameter: expected sha1, got
> > '9458b3786228369c63936db65827de3cc06200'
> > missing blob 4b9458b3786228369c63936db65827de3cc06200
> 
> the directories directly under .git/objects contain the first bytes of
> sha1, to use filesystem in a more efficient way. git-fsck expects an
> sha1 (or a reference).
> 
> Try running moving the corrupt object (with its *whole* name) some
> place else and run git-fsck --all.

^ permalink raw reply

* tracking remotes with Git
From: Ivan Shmakov @ 2007-11-09 12:44 UTC (permalink / raw)
  To: git

        I'm using Git (1.5.3.5 debian 1) for about a day or so, and I'm
        quite impressed that it allows tracking remote repositories
        (I've tried CVS and SVN) so easily with `git-cvsimport' and
        `git-svn'.  However, I've ran into a couple of problems with
        them:

        * it looks like `git-cvsimport' uses its own CVS protocol
          implementation which doesn't support compression; I've tried
          to clone a repository of a project hosted in CVS since circa
          1998 and it 20 MiB or so to obtain revisions until 2000 or so;
          any ways to minimize traffic?

        * how many revisions will `git-svn fetch' obtain from the SVN
          repository? I had to run it for several times to get the full
          history; I've tried to use (undocumented) `--fetch-all'
          option, but it appears to help (may be but for a little.)

        BTW, does http://.../git.git/ mean a ``bare repository (i. e., a
        would be /git/.git/) for Git''?

PS.  I wonder, if this mailing list accepts mail from unsubscribed
        `From:'s?

^ permalink raw reply

* Re: corrupt object on git-gc
From: Andreas Ericsson @ 2007-11-09 12:56 UTC (permalink / raw)
  To: Yossi Leybovich; +Cc: Alex Riesen, git
In-Reply-To: <6C2C79E72C305246B504CBA17B5500C9029A36F2@mtlexch01.mtl.com>

Yossi Leybovich wrote:
> Hi
> 
>  I know its loose but still I think there are references in the
> repository to this object.
> How I can remove it from the repository ?
> 
> 
> sleybo@SLEYBO-LT /w/work/EMC/ib.071030.001/ib
> $ mv .git/objects/4b ..
> 

That was not a very good idea. You just moved ALL objects whose hash
begin with 4b out of the object database.

Try only moving the offending file out of the 4b directory.

> sleybo@SLEYBO-LT /w/work/EMC/ib.071030.001/ib
> $ git-fsck --full
>               to    blob 4b920d658a05a66a9d18dd34b51d6e3a9f229ce1
>               to  commit 4b1aabfe3ecc12007535369a2ba17bcee776df64
>               to    blob 4b920d658a05a66a9d18dd34b51d6e3a9f229ce1
>               to    tree 4b89da873ce6e1b36a818d70d4665b3074f2354c
>               to    blob 4b920d658a05a66a9d18dd34b51d6e3a9f229ce1>

Notice how all of these start with 4b? Move the directory back and
get rid of just the object that causes errors.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

^ permalink raw reply

* cogito remote branch
From: MichaelTiloDressel @ 2007-11-09 13:16 UTC (permalink / raw)
  To: git

Hi,

I just saw the scripts cg-update, cg-push ..  scripts try to guess a
branch name functioning as origin if no argument is given. These scripts
seam to use a branch named <branchname>-origin if it exists and the
current
branch is named <branchname> and is not the branch named master.

I like that feature. Is it anywhere documented?

In case there is no branch named <branchname>-origin the scripts just
use origin even if the current branch is not master. I would prefer the
scripts to fail in this case and to print a message asking the user to
specifically name a branch.

Cheers,
Michael

^ permalink raw reply

* Re: cogito remote branch
From: Andreas Ericsson @ 2007-11-09 13:20 UTC (permalink / raw)
  To: MichaelTiloDressel@t-online.de; +Cc: git
In-Reply-To: <1IqTj5-24rt3I0@fwd33.aul.t-online.de>

MichaelTiloDressel@t-online.de wrote:
> Hi,
> 
> I just saw the scripts cg-update, cg-push ..  scripts try to guess a
> branch name functioning as origin if no argument is given. These scripts
> seam to use a branch named <branchname>-origin if it exists and the
> current
> branch is named <branchname> and is not the branch named master.
> 
> I like that feature. Is it anywhere documented?
> 
> In case there is no branch named <branchname>-origin the scripts just
> use origin even if the current branch is not master. I would prefer the
> scripts to fail in this case and to print a message asking the user to
> specifically name a branch.
> 

Cogito is deprecated, and has been for quite some time. The "remote"
feature of core git (inspired by cogito) offers similar benefits.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

^ permalink raw reply

* Re: [BUG] git-rebase fails when a commit message contains a diff
From: Johannes Schindelin @ 2007-11-09 13:20 UTC (permalink / raw)
  To: Benoit Sigoure; +Cc: Junio C Hamano, Jonas Fonseca, git
In-Reply-To: <6FCE17E3-9FAA-4676-B12A-369B31743DA6@lrde.epita.fr>

Hi,

On Fri, 9 Nov 2007, Benoit Sigoure wrote:

> On Nov 9, 2007, at 3:28 AM, Johannes Schindelin wrote:
> 
> > Would that not be easier to read as
> > 
> > 		test t = "$INTERACTIVE" &&
> > 			git_editor "$TODO" || die "Could not execute editor"
> 
> Hmm this will `die' if you're not running interactively.

D'oh.  Of course I meant

		test -z "$INTERACTIVE" || git_editor "$TODO" || die ...

Ciao,
Dscho

^ permalink raw reply

* Re: corrupt object on git-gc
From: Yossi Leybovich @ 2007-11-09 13:38 UTC (permalink / raw)
  To: git, ae, Yossi Leybovich

Yossi Leybovich wrote:
>> Hi
>>
>>  I know its loose but still I think there are references in the
>> repository to this object.
>> How I can remove it from the repository ?
>>

>That was not a very good idea. You just moved ALL objects whose hash
>begin with 4b out of the object database.

>Try only moving the offending file out of the 4b directory.

Did not help still the repository look for this object?
Any one know how can I track this object and understand which file is it



ib]$ mv .git/objects/4b/9458b3786228369c63936db65827de3cc06200 ../

ib]$ git-fsck --full
dangling commit 0d43a63623237385e432572bf61171713dcd8e98
dangling commit 4fc6b1127e4a7f4ff5b65a2dd8a90779b5aff3e0
dangling commit 7da607374fe2b1ae09228d2035dd608c73dad7c8
dangling commit 004ef09ae022c60a30f9cd61f90d18df5db3628e
dangling commit 85112c6fabb6b8913ab244a8645d67380616eba6
broken link from    tree 2d9263c6d23595e7cb2a21e5ebbb53655278dff8
             to    blob 4b9458b3786228369c63936db65827de3cc06200
missing blob 4b9458b3786228369c63936db65827de3cc06200
dangling commit bd98481afa93356fa6daa4b6f88c4e631ae2fd72
dangling commit e81e3d2c9c25e5bf5b31327b10b23f9bd0a6d056
dangling commit 92ff9b8cbc771345c9cde0c7fef2c23bb79242b9

^ permalink raw reply

* Re: [PATCH 1/2] Add strchrnul()
From: Jakub Narebski @ 2007-11-09 13:42 UTC (permalink / raw)
  To: git
In-Reply-To: <473434ED.50002@op5.se>

[Cc: Andreas Ericsson <ae@op5.se>, 
     René Scharfe <rene.scharfe@lsrfire.ath.cx>, 
     Junio C Hamano <gitster@pobox.com>,
     git@vger.kernel.org]

Andreas Ericsson wrote:

> René Scharfe wrote:
>> As suggested by Pierre Habouzit, add strchrnul().  It's a useful GNU
>> extension and can simplify string parser code.  There are several
>> places in git that can be converted to strchrnul(); as a trivial
>> example, this patch introduces its usage to builtin-fetch--tool.c.
>> 
>> Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
>> ---
>> 
>>  Makefile              |   13 +++++++++++++
>>  builtin-fetch--tool.c |    8 ++------
>>  compat/strchrnul.c    |    8 ++++++++
>>  git-compat-util.h     |    5 +++++
>>  4 files changed, 28 insertions(+), 6 deletions(-)
>> 
>> diff --git a/Makefile b/Makefile
>> index 0d5590f..578c999 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -30,6 +30,8 @@ all::
>>  #
>>  # Define NO_MEMMEM if you don't have memmem.
>>  #
>> +# Define NO_STRCHRNUL if you don't have strchrnul.
>> +#

Original patch lacked adding appropriate test to configure,
i.e. something like below to configure.ac

 #
 # Define NO_STRCHRNUL if you don't have strchrnul.
 AC_CHECK_FUNC(strchrnul,
 [NO_STRCHRNUL=],
 [NO_STRCHRNUL=YesPlease])
 AC_SUBST(NO_STRCHRNUL)
 
and the following line to config.mak.in

 NO_STRCHRNUL=@NO_STRCHRNUL@

> This seems overly complicated. How about this instead?
[...]
> I'm fairly much against forcing people to know what library
> functions they have in order to get software to compile
> properly. This is, imo, a neater solution, and also inlines
> the function as suggested by Dscho.

Wouldn't it be better to add ./configure check instead? See above.

Although I guess that people using ./configure to set compilation
options (to generate config.mak.autogen) are minority...

> +#if !defined(__GLIBC__) && !__GLIBC_PREREQ(2, 1)
> +# define strchrnul(s, c) gitstrchrnul(s, c)
> +static inline char *gitstrchrnul(const char *s, int c)
> +{
> +       while (*s && *s != c)
> +               s++;
> +
> +       return (char *)s;
> +}
> +#endif
> +

This is good solution, although I'm not sure about the check itself.
What if somebody has libc which is not glibc, but it does have
strchrnul?

> diff --git a/builtin-fetch--tool.c b/builtin-fetch--tool.c
> index 6a78517..ed60847 100644
> --- a/builtin-fetch--tool.c
> +++ b/builtin-fetch--tool.c
> @@ -435,9 +435,7 @@ static int pick_rref(int sha1_only, const char *rref, const char *ls_remote_resu
>                               cp++;
>                       if (!*cp)
>                               break;
> -                     np = strchr(cp, '\n');
> -                     if (!np)
> -                             np = cp + strlen(cp);
> +                     np = strchrnul(cp, '\n');
>                       if (pass) {
>                               lrr_list[i].line = cp;
>                               lrr_list[i].name = cp + 41;
> @@ -461,9 +459,7 @@ static int pick_rref(int sha1_only, const char *rref, const char *ls_remote_resu
>                       rref++;
>               if (!*rref)
>                       break;
> -             next = strchr(rref, '\n');
> -             if (!next)
> -                     next = rref + strlen(rref);
> +             next = strchrnul(rref, '\n');
>               rreflen = next - rref;
>  
>               for (i = 0; i < lrr_count; i++) {

This IMHO should go to separate patch.

-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git

^ permalink raw reply

* [PATCH] Make builtin-tag.c use parse_options.
From: Carlos Rica @ 2007-11-09 13:42 UTC (permalink / raw)
  To: git, Junio C Hamano

Also, this removes those tests ensuring that repeated
-m options don't allocate memory more than once, because now
this is done after parsing options, using the last one
when more are given. The same for -F.

Signed-off-by: Carlos Rica <jasampler@gmail.com>
---

    Applied to "next".
    Comments welcomed.

 builtin-tag.c  |  141 ++++++++++++++++++++++++--------------------------------
 t/t7004-tag.sh |    8 +---
 2 files changed, 61 insertions(+), 88 deletions(-)

diff --git a/builtin-tag.c b/builtin-tag.c
index 66e5a58..5af1950 100644
--- a/builtin-tag.c
+++ b/builtin-tag.c
@@ -11,9 +11,15 @@
 #include "refs.h"
 #include "tag.h"
 #include "run-command.h"
-
-static const char builtin_tag_usage[] =
-  "git-tag [-n [<num>]] -l [<pattern>] | [-a | -s | -u <key-id>] [-f | -d | -v] [-m <msg> | -F <file>] <tagname> [<head>]";
+#include "parse-options.h"
+
+static const char * const git_tag_usage[] = {
+	"git-tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]",
+	"git-tag -d <tagname>...",
+	"git-tag [-n [<num>]] -l [<pattern>]",
+	"git-tag -v <tagname>...",
+	NULL
+};

 static char signingkey[1000];

@@ -308,101 +314,74 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 {
 	struct strbuf buf;
 	unsigned char object[20], prev[20];
-	int annotate = 0, sign = 0, force = 0, lines = 0, message = 0;
 	char ref[PATH_MAX];
 	const char *object_ref, *tag;
-	int i;
 	struct ref_lock *lock;

+	int annotate = 0, sign = 0, force = 0, lines = 0,
+					delete = 0, verify = 0;
+	char *list = NULL, *msg = NULL, *msgfile = NULL, *keyid = NULL;
+	const char *no_pattern = "NO_PATTERN";
+	struct option options[] = {
+		{ OPTION_STRING, 'l', NULL, &list, "pattern", "list tag names",
+			PARSE_OPT_OPTARG, NULL, (intptr_t) no_pattern },
+		{ OPTION_INTEGER, 'n', NULL, &lines, NULL,
+				"print n lines of each tag message",
+				PARSE_OPT_OPTARG, NULL, 1 },
+		OPT_BOOLEAN('d', NULL, &delete, "delete tags"),
+		OPT_BOOLEAN('v', NULL, &verify, "verify tags"),
+
+		OPT_GROUP("Tag creation options"),
+		OPT_BOOLEAN('a', NULL, &annotate,
+					"annotated tag, needs a message"),
+		OPT_STRING('m', NULL, &msg, "msg", "message for the tag"),
+		OPT_STRING('F', NULL, &msgfile, "file", "message in a file"),
+		OPT_BOOLEAN('s', NULL, &sign, "annotated and GPG-signed tag"),
+		OPT_STRING('u', NULL, &keyid, "key-id",
+					"use another key to sign the tag"),
+		OPT_BOOLEAN('f', NULL, &force, "replace the tag if exists"),
+		OPT_END()
+	};
+
 	git_config(git_tag_config);
-	strbuf_init(&buf, 0);

-	for (i = 1; i < argc; i++) {
-		const char *arg = argv[i];
+	argc = parse_options(argc, argv, options, git_tag_usage, 0);

-		if (arg[0] != '-')
-			break;
-		if (!strcmp(arg, "-a")) {
-			annotate = 1;
-			continue;
-		}
-		if (!strcmp(arg, "-s")) {
-			annotate = 1;
-			sign = 1;
-			continue;
-		}
-		if (!strcmp(arg, "-f")) {
-			force = 1;
-			continue;
-		}
-		if (!strcmp(arg, "-n")) {
-			if (i + 1 == argc || *argv[i + 1] == '-')
-				/* no argument */
-				lines = 1;
-			else
-				lines = isdigit(*argv[++i]) ?
-					atoi(argv[i]) : 1;
-			continue;
-		}
-		if (!strcmp(arg, "-m")) {
-			annotate = 1;
-			i++;
-			if (i == argc)
-				die("option -m needs an argument.");
-			if (message)
-				die("only one -F or -m option is allowed.");
-			strbuf_addstr(&buf, argv[i]);
-			message = 1;
-			continue;
-		}
-		if (!strcmp(arg, "-F")) {
-			annotate = 1;
-			i++;
-			if (i == argc)
-				die("option -F needs an argument.");
-			if (message)
-				die("only one -F or -m option is allowed.");
-
-			if (!strcmp(argv[i], "-")) {
+	if (list)
+		return list_tags(list == no_pattern ? NULL : list, lines);
+	if (delete)
+		return for_each_tag_name(argv, delete_tag);
+	if (verify)
+		return for_each_tag_name(argv, verify_tag);
+
+	strbuf_init(&buf, 0);
+	if (msg || msgfile) {
+		if (msg && msgfile)
+			die("only one -F or -m option is allowed.");
+		annotate = 1;
+		if (msg)
+			strbuf_addstr(&buf, msg);
+		else {
+			if (!strcmp(msgfile, "-")) {
 				if (strbuf_read(&buf, 0, 1024) < 0)
-					die("cannot read %s", argv[i]);
+					die("cannot read %s", msgfile);
 			} else {
-				if (strbuf_read_file(&buf, argv[i], 1024) < 0)
+				if (strbuf_read_file(&buf, msgfile, 1024) < 0)
 					die("could not open or read '%s': %s",
-						argv[i], strerror(errno));
+						msgfile, strerror(errno));
 			}
-			message = 1;
-			continue;
-		}
-		if (!strcmp(arg, "-u")) {
-			annotate = 1;
-			sign = 1;
-			i++;
-			if (i == argc)
-				die("option -u needs an argument.");
-			if (strlcpy(signingkey, argv[i], sizeof(signingkey))
-							>= sizeof(signingkey))
-				die("argument to option -u too long");
-			continue;
 		}
-		if (!strcmp(arg, "-l"))
-			return list_tags(argv[i + 1], lines);
-		if (!strcmp(arg, "-d"))
-			return for_each_tag_name(argv + i + 1, delete_tag);
-		if (!strcmp(arg, "-v"))
-			return for_each_tag_name(argv + i + 1, verify_tag);
-		usage(builtin_tag_usage);
 	}

-	if (i == argc) {
+	if (argc == 0) {
 		if (annotate)
-			usage(builtin_tag_usage);
+			usage_with_options(git_tag_usage, options);
 		return list_tags(NULL, lines);
 	}
-	tag = argv[i++];
+	tag = argv[0];

-	object_ref = i < argc ? argv[i] : "HEAD";
-	if (i + 1 < argc)
+	object_ref = argc == 2 ? argv[1] : "HEAD";
+	if (argc > 2)
 		die("too many params");

 	if (get_sha1(object_ref, object))
@@ -419,7 +398,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix)
 		die("tag '%s' already exists", tag);

 	if (annotate)
-		create_tag(object, tag, &buf, message, sign, object);
+		create_tag(object, tag, &buf, msg || msgfile, sign, object);

 	lock = lock_any_ref_for_update(ref, prev, 0);
 	if (!lock)
diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh
index 0d07bc3..4b09d28 100755
--- a/t/t7004-tag.sh
+++ b/t/t7004-tag.sh
@@ -339,20 +339,14 @@ test_expect_success \
 '

 test_expect_success \
-	'trying to create tags giving many -m or -F options should fail' '
+	'trying to create tags giving both -m or -F options should fail' '
 	echo "message file 1" >msgfile1 &&
 	echo "message file 2" >msgfile2 &&
 	! tag_exists msgtag &&
-	! git-tag -m "message 1" -m "message 2" msgtag &&
-	! tag_exists msgtag &&
-	! git-tag -F msgfile1 -F msgfile2 msgtag &&
-	! tag_exists msgtag &&
 	! git-tag -m "message 1" -F msgfile1 msgtag &&
 	! tag_exists msgtag &&
 	! git-tag -F msgfile1 -m "message 1" msgtag &&
 	! tag_exists msgtag &&
-	! git-tag -F msgfile1 -m "message 1" -F msgfile2 msgtag &&
-	! tag_exists msgtag &&
 	! git-tag -m "message 1" -F msgfile1 -m "message 2" msgtag &&
 	! tag_exists msgtag
 '
-- 
1.5.3.4

^ permalink raw reply related

* Re: [PATCH 3/9] msm: timer support using the GPT and DGT timers
From: Brian Swetland @ 2007-11-09 13:39 UTC (permalink / raw)
  To: Uwe Kleine-König, linux-arm-kernel, git
In-Reply-To: <20071109131930.GA19343@bre-cln-ukleine.digi.com>

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

[Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>]
> 
> Hello Brian,
> 
> [adding git ML to Cc:]
> 
> > > 	Content-Type: text/plain; charset=utf-8
> > > 	Content-Transfer-Encoding: 8bit
> > 
> > Mine do not seem to.
> I think they are only generated if the content contains non-ASCII.  So
> the attached example isn't very helpful.

Looking at more of the patches (sorry about sending one not exhibiting
the problem -- I picked a small one, forgetting that not all of them
had Arve's name as the author), it looks like the body is plain 7bit
ascii, but the From header has the utf-8 content:

>From 0ac8027053bb686c19a412f0f22f4a305a77ab59 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= <arve@android.com>
Date: Wed, 7 Nov 2007 22:17:29 -0800
Subject: [PATCH 3/9] msm: timer support using the GPT and DGT timers

When sent with git-send-email, the From: line above ended up in the
message, unescaped as utf-8 text, but the generated email itself did
not have any encoding specified.  I didn't 

Attached is the original patch and the message that resulted when I
used git-send-email to mail the patch to myself.

Brian

[-- Attachment #2: 0003-msm-timer-support-using-the-GPT-and-DGT-timers.patch --]
[-- Type: text/x-diff, Size: 6751 bytes --]

>From 0ac8027053bb686c19a412f0f22f4a305a77ab59 Mon Sep 17 00:00:00 2001
From: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= <arve@android.com>
Date: Wed, 7 Nov 2007 22:17:29 -0800
Subject: [PATCH 3/9] msm: timer support using the GPT and DGT timers

Signed-off-by: Brian Swetland <swetland@android.com>
---
 arch/arm/mach-msm/timer.c |  205 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 205 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-msm/timer.c

diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c
new file mode 100644
index 0000000..0781a16
--- /dev/null
+++ b/arch/arm/mach-msm/timer.c
@@ -0,0 +1,205 @@
+/* linux/arch/arm/mach-msm/timer.c
+**
+** Copyright (C) 2007 Google, Inc.
+**
+** This software is licensed under the terms of the GNU General Public
+** License version 2, as published by the Free Software Foundation, and
+** may be copied, distributed, and modified under those terms.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+*/
+
+#include <linux/init.h>
+#include <linux/time.h>
+#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/clk.h>
+#include <linux/clockchips.h>
+#include <linux/delay.h>
+
+#include <asm/mach/time.h>
+#include <asm/arch/msm_iomap.h>
+
+#include <asm/io.h>
+
+#define MSM_DGT_BASE (MSM_GPT_BASE + 0x10)
+#define MSM_DGT_SHIFT (5)
+
+#define TIMER_MATCH_VAL         0x0000
+#define TIMER_COUNT_VAL         0x0004
+#define TIMER_ENABLE            0x0008
+#define TIMER_ENABLE_CLR_ON_MATCH_EN    2
+#define TIMER_ENABLE_EN                 1
+#define TIMER_CLEAR             0x000C
+
+#define CSR_PROTECTION          0x0020
+#define CSR_PROTECTION_EN               1
+
+#define GPT_HZ 32768
+#define DGT_HZ 19200000 // 19.2 MHz or 600 KHz after shift
+
+struct msm_clock {
+	struct clock_event_device   clockevent;
+	struct clocksource          clocksource;
+	struct irqaction            irq;
+	uint32_t                    regbase;
+	uint32_t                    freq;
+	uint32_t                    shift;
+};
+
+static irqreturn_t msm_timer_interrupt(int irq, void *dev_id)
+{
+	struct clock_event_device *evt = dev_id;
+	evt->event_handler(evt);
+	return IRQ_HANDLED;
+}
+
+static cycle_t msm_gpt_read(void)
+{
+	return msm_readl(MSM_GPT_BASE + TIMER_COUNT_VAL);
+}
+
+static cycle_t msm_dgt_read(void)
+{
+	return msm_readl(MSM_DGT_BASE + TIMER_COUNT_VAL) >> MSM_DGT_SHIFT;
+}
+
+static int msm_timer_set_next_event(unsigned long cycles,
+				    struct clock_event_device *evt)
+{
+	struct msm_clock *clock = container_of(evt, struct msm_clock, clockevent);
+	uint32_t now = msm_readl(clock->regbase + TIMER_COUNT_VAL);
+	uint32_t alarm = now + (cycles << clock->shift);
+	int late;
+
+	msm_writel(alarm, clock->regbase + TIMER_MATCH_VAL);
+	now = msm_readl(clock->regbase + TIMER_COUNT_VAL);
+	late = now - alarm;
+	if(late >= (-2 << clock->shift) && late < DGT_HZ*5) {
+		printk(KERN_NOTICE "msm_timer_set_next_event(%lu) clock %s, "
+		       "alarm already expired, now %x, alarm %x, late %d\n",
+		       cycles, clock->clockevent.name, now, alarm, late);
+		return -ETIME;
+	}
+	return 0;
+}
+
+static void msm_timer_set_mode(enum clock_event_mode mode,
+			      struct clock_event_device *evt)
+{
+	struct msm_clock *clock = container_of(evt, struct msm_clock, clockevent);
+	switch (mode) {
+	case CLOCK_EVT_MODE_RESUME:
+	case CLOCK_EVT_MODE_PERIODIC:
+		break;
+	case CLOCK_EVT_MODE_ONESHOT:
+		msm_writel(TIMER_ENABLE_EN, clock->regbase + TIMER_ENABLE);
+		break;
+	case CLOCK_EVT_MODE_UNUSED:
+	case CLOCK_EVT_MODE_SHUTDOWN:
+		msm_writel(0, clock->regbase + TIMER_ENABLE);
+		break;
+	}
+}
+
+static struct msm_clock msm_clocks[] = {
+	{
+		.clockevent = {
+			.name           = "gp_timer",
+			.features       = CLOCK_EVT_FEAT_ONESHOT,
+			.shift          = 32,
+			.rating         = 200,
+			.set_next_event = msm_timer_set_next_event,
+			.set_mode       = msm_timer_set_mode,
+		},
+		.clocksource = {
+			.name           = "gp_timer",
+			.rating         = 200,
+			.read           = msm_gpt_read,
+			.mask           = CLOCKSOURCE_MASK(32),
+			.shift          = 24,
+			.flags          = CLOCK_SOURCE_IS_CONTINUOUS,
+		},
+		.irq = {
+			.name    = "gp_timer",
+			.flags   = IRQF_DISABLED | IRQF_TIMER | IRQF_TRIGGER_RISING,
+			.handler = msm_timer_interrupt,
+			.dev_id  = &msm_clocks[0].clockevent,
+			.irq     = INT_GP_TIMER_EXP
+		},
+		.regbase = MSM_GPT_BASE,
+		.freq = GPT_HZ
+	},
+	{
+		.clockevent = {
+			.name           = "dg_timer",
+			.features       = CLOCK_EVT_FEAT_ONESHOT,
+			.shift          = 32 + MSM_DGT_SHIFT,
+			.rating         = 300,
+			.set_next_event = msm_timer_set_next_event,
+			.set_mode       = msm_timer_set_mode,
+		},
+		.clocksource = {
+			.name           = "dg_timer",
+			.rating         = 300,
+			.read           = msm_dgt_read,
+			.mask           = CLOCKSOURCE_MASK((32 - MSM_DGT_SHIFT)),
+			.shift          = 24 - MSM_DGT_SHIFT,
+			.flags          = CLOCK_SOURCE_IS_CONTINUOUS,
+		},
+		.irq = {
+			.name    = "dg_timer",
+			.flags   = IRQF_DISABLED | IRQF_TIMER | IRQF_TRIGGER_RISING,
+			.handler = msm_timer_interrupt,
+			.dev_id  = &msm_clocks[1].clockevent,
+			.irq     = INT_DEBUG_TIMER_EXP
+		},
+		.regbase = MSM_DGT_BASE,
+		.freq = DGT_HZ >> MSM_DGT_SHIFT,
+		.shift = MSM_DGT_SHIFT
+	}
+};
+
+static void /*__init*/ msm_timer_init(void)
+{
+	int i;
+	int res;
+	printk("msm_timer_init()\n");
+
+	for(i = 0; i < ARRAY_SIZE(msm_clocks); i++) {
+		struct msm_clock *clock = &msm_clocks[i];
+		struct clock_event_device *ce = &clock->clockevent;
+		struct clocksource *cs = &clock->clocksource;
+		msm_writel(0, clock->regbase + TIMER_ENABLE);
+		msm_writel(0, clock->regbase + TIMER_CLEAR);
+		msm_writel(~0, clock->regbase + TIMER_MATCH_VAL);
+
+		ce->mult = div_sc(clock->freq, NSEC_PER_SEC, ce->shift);
+		// allow at least 10 seconds to notice that the timer wrapped
+		ce->max_delta_ns =
+			clockevent_delta2ns(0xf0000000 >> clock->shift, ce);
+		ce->min_delta_ns = clockevent_delta2ns(4, ce); // 4 gets rounded down to 3
+		ce->cpumask = cpumask_of_cpu(0);
+
+		cs->mult = clocksource_hz2mult(clock->freq,cs->shift);
+		res = clocksource_register(cs);
+		if(res)
+			printk(KERN_ERR "msm_timer_init: clocksource_register "
+			       "failed for %s\n", cs->name);
+
+		res = setup_irq(clock->irq.irq, &clock->irq);
+		if(res)
+			printk(KERN_ERR "msm_timer_init: setup_irq "
+			       "failed for %s\n", cs->name);
+
+		clockevents_register_device(ce);
+	}
+}
+
+struct sys_timer msm_timer = {
+	.init = msm_timer_init
+};
-- 
1.5.3.1


[-- Attachment #3: 0mail --]
[-- Type: text/plain, Size: 7874 bytes --]

>From swetland@google.com Fri Nov  9 05:35:00 2007
Return-Path: <swetland@google.com>
Received: from wpck26.suw.corp.google.com [172.24.219.218]
	by bulgaria with IMAP (fetchmail-6.3.6)
	for <swetland@localhost> (single-drop); Fri, 09 Nov 2007 05:35:00 -0800 (PST)
Received: from wpck26.suw.corp.google.com ([unix socket])
	 by imap4.corp.google.com (Cyrus v2.2.12-Invoca-RPM-2.2.12-1gg2) with LMTPA;
	 Fri, 09 Nov 2007 05:35:04 -0800
X-Sieve: CMU Sieve 2.2
Received: from zps35.corp.google.com (zps35.corp.google.com [172.25.146.35])
	by wpck26.suw.corp.google.com with ESMTP id lA9DZ4Ou025468
	for <swetland@wpck26.suw.corp.google.com>; Fri, 9 Nov 2007 05:35:04 -0800
Received: from bulgaria (bulgaria.corp.google.com [172.18.102.38])
	by zps35.corp.google.com with ESMTP id lA9DYufb029971;
	Fri, 9 Nov 2007 05:34:56 -0800
Received: by bulgaria (Postfix, from userid 1000)
	id 5618E8F45E; Fri,  9 Nov 2007 05:34:46 -0800 (PST)
From: swetland@google.com
To: swetland@google.com
Cc: =?utf-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= <arve@android.com>,
        Brian Swetland <swetland@android.com>
Subject: [PATCH 3/9] msm: timer support using the GPT and DGT timers
Date: Fri,  9 Nov 2007 05:34:46 -0800
Message-Id: <11946152862759-git-send-email-swetland@frotz.net>
X-Mailer: git-send-email 1.5.3.1
Status: RO
Content-Length: 6551

From: Arve Hjønnevåg <arve@android.com>

Signed-off-by: Brian Swetland <swetland@android.com>
---
 arch/arm/mach-msm/timer.c |  205 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 205 insertions(+), 0 deletions(-)
 create mode 100644 arch/arm/mach-msm/timer.c

diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c
new file mode 100644
index 0000000..0781a16
--- /dev/null
+++ b/arch/arm/mach-msm/timer.c
@@ -0,0 +1,205 @@
+/* linux/arch/arm/mach-msm/timer.c
+**
+** Copyright (C) 2007 Google, Inc.
+**
+** This software is licensed under the terms of the GNU General Public
+** License version 2, as published by the Free Software Foundation, and
+** may be copied, distributed, and modified under those terms.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+** GNU General Public License for more details.
+**
+*/
+
+#include <linux/init.h>
+#include <linux/time.h>
+#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/clk.h>
+#include <linux/clockchips.h>
+#include <linux/delay.h>
+
+#include <asm/mach/time.h>
+#include <asm/arch/msm_iomap.h>
+
+#include <asm/io.h>
+
+#define MSM_DGT_BASE (MSM_GPT_BASE + 0x10)
+#define MSM_DGT_SHIFT (5)
+
+#define TIMER_MATCH_VAL         0x0000
+#define TIMER_COUNT_VAL         0x0004
+#define TIMER_ENABLE            0x0008
+#define TIMER_ENABLE_CLR_ON_MATCH_EN    2
+#define TIMER_ENABLE_EN                 1
+#define TIMER_CLEAR             0x000C
+
+#define CSR_PROTECTION          0x0020
+#define CSR_PROTECTION_EN               1
+
+#define GPT_HZ 32768
+#define DGT_HZ 19200000 // 19.2 MHz or 600 KHz after shift
+
+struct msm_clock {
+	struct clock_event_device   clockevent;
+	struct clocksource          clocksource;
+	struct irqaction            irq;
+	uint32_t                    regbase;
+	uint32_t                    freq;
+	uint32_t                    shift;
+};
+
+static irqreturn_t msm_timer_interrupt(int irq, void *dev_id)
+{
+	struct clock_event_device *evt = dev_id;
+	evt->event_handler(evt);
+	return IRQ_HANDLED;
+}
+
+static cycle_t msm_gpt_read(void)
+{
+	return msm_readl(MSM_GPT_BASE + TIMER_COUNT_VAL);
+}
+
+static cycle_t msm_dgt_read(void)
+{
+	return msm_readl(MSM_DGT_BASE + TIMER_COUNT_VAL) >> MSM_DGT_SHIFT;
+}
+
+static int msm_timer_set_next_event(unsigned long cycles,
+				    struct clock_event_device *evt)
+{
+	struct msm_clock *clock = container_of(evt, struct msm_clock, clockevent);
+	uint32_t now = msm_readl(clock->regbase + TIMER_COUNT_VAL);
+	uint32_t alarm = now + (cycles << clock->shift);
+	int late;
+
+	msm_writel(alarm, clock->regbase + TIMER_MATCH_VAL);
+	now = msm_readl(clock->regbase + TIMER_COUNT_VAL);
+	late = now - alarm;
+	if(late >= (-2 << clock->shift) && late < DGT_HZ*5) {
+		printk(KERN_NOTICE "msm_timer_set_next_event(%lu) clock %s, "
+		       "alarm already expired, now %x, alarm %x, late %d\n",
+		       cycles, clock->clockevent.name, now, alarm, late);
+		return -ETIME;
+	}
+	return 0;
+}
+
+static void msm_timer_set_mode(enum clock_event_mode mode,
+			      struct clock_event_device *evt)
+{
+	struct msm_clock *clock = container_of(evt, struct msm_clock, clockevent);
+	switch (mode) {
+	case CLOCK_EVT_MODE_RESUME:
+	case CLOCK_EVT_MODE_PERIODIC:
+		break;
+	case CLOCK_EVT_MODE_ONESHOT:
+		msm_writel(TIMER_ENABLE_EN, clock->regbase + TIMER_ENABLE);
+		break;
+	case CLOCK_EVT_MODE_UNUSED:
+	case CLOCK_EVT_MODE_SHUTDOWN:
+		msm_writel(0, clock->regbase + TIMER_ENABLE);
+		break;
+	}
+}
+
+static struct msm_clock msm_clocks[] = {
+	{
+		.clockevent = {
+			.name           = "gp_timer",
+			.features       = CLOCK_EVT_FEAT_ONESHOT,
+			.shift          = 32,
+			.rating         = 200,
+			.set_next_event = msm_timer_set_next_event,
+			.set_mode       = msm_timer_set_mode,
+		},
+		.clocksource = {
+			.name           = "gp_timer",
+			.rating         = 200,
+			.read           = msm_gpt_read,
+			.mask           = CLOCKSOURCE_MASK(32),
+			.shift          = 24,
+			.flags          = CLOCK_SOURCE_IS_CONTINUOUS,
+		},
+		.irq = {
+			.name    = "gp_timer",
+			.flags   = IRQF_DISABLED | IRQF_TIMER | IRQF_TRIGGER_RISING,
+			.handler = msm_timer_interrupt,
+			.dev_id  = &msm_clocks[0].clockevent,
+			.irq     = INT_GP_TIMER_EXP
+		},
+		.regbase = MSM_GPT_BASE,
+		.freq = GPT_HZ
+	},
+	{
+		.clockevent = {
+			.name           = "dg_timer",
+			.features       = CLOCK_EVT_FEAT_ONESHOT,
+			.shift          = 32 + MSM_DGT_SHIFT,
+			.rating         = 300,
+			.set_next_event = msm_timer_set_next_event,
+			.set_mode       = msm_timer_set_mode,
+		},
+		.clocksource = {
+			.name           = "dg_timer",
+			.rating         = 300,
+			.read           = msm_dgt_read,
+			.mask           = CLOCKSOURCE_MASK((32 - MSM_DGT_SHIFT)),
+			.shift          = 24 - MSM_DGT_SHIFT,
+			.flags          = CLOCK_SOURCE_IS_CONTINUOUS,
+		},
+		.irq = {
+			.name    = "dg_timer",
+			.flags   = IRQF_DISABLED | IRQF_TIMER | IRQF_TRIGGER_RISING,
+			.handler = msm_timer_interrupt,
+			.dev_id  = &msm_clocks[1].clockevent,
+			.irq     = INT_DEBUG_TIMER_EXP
+		},
+		.regbase = MSM_DGT_BASE,
+		.freq = DGT_HZ >> MSM_DGT_SHIFT,
+		.shift = MSM_DGT_SHIFT
+	}
+};
+
+static void /*__init*/ msm_timer_init(void)
+{
+	int i;
+	int res;
+	printk("msm_timer_init()\n");
+
+	for(i = 0; i < ARRAY_SIZE(msm_clocks); i++) {
+		struct msm_clock *clock = &msm_clocks[i];
+		struct clock_event_device *ce = &clock->clockevent;
+		struct clocksource *cs = &clock->clocksource;
+		msm_writel(0, clock->regbase + TIMER_ENABLE);
+		msm_writel(0, clock->regbase + TIMER_CLEAR);
+		msm_writel(~0, clock->regbase + TIMER_MATCH_VAL);
+
+		ce->mult = div_sc(clock->freq, NSEC_PER_SEC, ce->shift);
+		// allow at least 10 seconds to notice that the timer wrapped
+		ce->max_delta_ns =
+			clockevent_delta2ns(0xf0000000 >> clock->shift, ce);
+		ce->min_delta_ns = clockevent_delta2ns(4, ce); // 4 gets rounded down to 3
+		ce->cpumask = cpumask_of_cpu(0);
+
+		cs->mult = clocksource_hz2mult(clock->freq,cs->shift);
+		res = clocksource_register(cs);
+		if(res)
+			printk(KERN_ERR "msm_timer_init: clocksource_register "
+			       "failed for %s\n", cs->name);
+
+		res = setup_irq(clock->irq.irq, &clock->irq);
+		if(res)
+			printk(KERN_ERR "msm_timer_init: setup_irq "
+			       "failed for %s\n", cs->name);
+
+		clockevents_register_device(ce);
+	}
+}
+
+struct sys_timer msm_timer = {
+	.init = msm_timer_init
+};
-- 
1.5.3.1



^ permalink raw reply related

* Re: corrupt object on git-gc
From: Andreas Ericsson @ 2007-11-09 13:46 UTC (permalink / raw)
  To: Yossi Leybovich; +Cc: git, Yossi Leybovich
In-Reply-To: <4fe79b4b0711090538wf483ce7j89c518962e89780e@mail.gmail.com>

Yossi Leybovich wrote:
> Yossi Leybovich wrote:
>>> Hi
>>>
>>>  I know its loose but still I think there are references in the
>>> repository to this object.
>>> How I can remove it from the repository ?
>>>
> 
>> That was not a very good idea. You just moved ALL objects whose hash
>> begin with 4b out of the object database.
> 
>> Try only moving the offending file out of the 4b directory.
> 
> Did not help still the repository look for this object?
> Any one know how can I track this object and understand which file is it
> 

Is this a super-secret project or you can make a tarball of the .git
directory and send it to me? Trying to track down the cause through
email is decidedly slow.

> 
> 
> ib]$ mv .git/objects/4b/9458b3786228369c63936db65827de3cc06200 ../
> 
> ib]$ git-fsck --full
> dangling commit 0d43a63623237385e432572bf61171713dcd8e98
> dangling commit 4fc6b1127e4a7f4ff5b65a2dd8a90779b5aff3e0
> dangling commit 7da607374fe2b1ae09228d2035dd608c73dad7c8
> dangling commit 004ef09ae022c60a30f9cd61f90d18df5db3628e
> dangling commit 85112c6fabb6b8913ab244a8645d67380616eba6
> broken link from    tree 2d9263c6d23595e7cb2a21e5ebbb53655278dff8
>              to    blob 4b9458b3786228369c63936db65827de3cc06200

One tree uses the object. I'm not sure if any commit-objects
use the tree. Try

for b in $(git branch --no-color -a | cut -b3-); do
for rev in $(git rev-list HEAD); do
	git ls-tree -r $rev | grep -q 2d9263c6d23595e7cb2a21e5ebbb53655278dff8
	test $? -eq 0 && echo $rev && break
done
done

If it turns up empty, you *should* be able to safely delete
2d9263c6d23595e7cb2a21e5ebbb53655278dff8 and 
4b9458b3786228369c63936db65827de3cc06200

Make sure to take a backup first though.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

^ permalink raw reply

* Re: cogito remote branch
From: MichaelTiloDressel @ 2007-11-09 13:51 UTC (permalink / raw)
  To: Andreas Ericsson; +Cc: git
In-Reply-To: <47345E85.8090702@op5.se>


Such a pity.  We just got used to it.

-----Original Message-----
Date: Fri, 09 Nov 2007 14:20:05 +0100
Subject: Re: cogito remote branch
From: Andreas Ericsson 
To: "MichaelTiloDressel@t-online.de" 

MichaelTiloDressel@t-online.de wrote:
> Hi,
> 
> I just saw the scripts cg-update, cg-push ..  scripts try to guess a
> branch name functioning as origin if no argument is given. These
scripts
> seam to use a branch named -origin if it exists and the
> current
> branch is named  and is not the branch named master.
> 
> I like that feature. Is it anywhere documented?
> 
> In case there is no branch named -origin the scripts just
> use origin even if the current branch is not master. I would prefer
the
> scripts to fail in this case and to print a message asking the user to
> specifically name a branch.
> 

Cogito is deprecated, and has been for quite some time. The "remote"
feature of core git (inspired by cogito) offers similar benefits.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

^ permalink raw reply

* Re: [PATCH] Make builtin-tag.c use parse_options.
From: Jakub Narebski @ 2007-11-09 13:57 UTC (permalink / raw)
  To: git
In-Reply-To: <473463E0.7000406@gmail.com>

Carlos Rica wrote:

> +     struct option options[] = {
> +             { OPTION_STRING, 'l', NULL, &list, "pattern", "list tag names",
> +                     PARSE_OPT_OPTARG, NULL, (intptr_t) no_pattern },

> +             OPT_STRING('F', NULL, &msgfile, "file", "message in a file"),

Does it matter that you use OPTION_STRING here and OPT_STRING macro there?

-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git

^ permalink raw reply

* Re: [PATCH 1/2] Add strchrnul()
From: Andreas Ericsson @ 2007-11-09 13:59 UTC (permalink / raw)
  To: Jakub Narebski; +Cc: René Scharfe, Junio C Hamano, Git Mailing List
In-Reply-To: <fh1o4o$jei$1@ger.gmane.org>

Jakub Narebski wrote:
> [Cc: Andreas Ericsson <ae@op5.se>, 
>      René Scharfe <rene.scharfe@lsrfire.ath.cx>, 
>      Junio C Hamano <gitster@pobox.com>,
>      git@vger.kernel.org]
> 

I'm not sure what's up with this, but I didn't see this email on git@vger,
so re-adding it to the Cc list now.

> 
> Original patch lacked adding appropriate test to configure,
> i.e. something like below to configure.ac
> 
>  #
>  # Define NO_STRCHRNUL if you don't have strchrnul.
>  AC_CHECK_FUNC(strchrnul,
>  [NO_STRCHRNUL=],
>  [NO_STRCHRNUL=YesPlease])
>  AC_SUBST(NO_STRCHRNUL)
>  
> and the following line to config.mak.in
> 
>  NO_STRCHRNUL=@NO_STRCHRNUL@
> 
>> This seems overly complicated. How about this instead?
> [...]
>> I'm fairly much against forcing people to know what library
>> functions they have in order to get software to compile
>> properly. This is, imo, a neater solution, and also inlines
>> the function as suggested by Dscho.
> 
> Wouldn't it be better to add ./configure check instead? See above.
> 
> Although I guess that people using ./configure to set compilation
> options (to generate config.mak.autogen) are minority...
> 

Perhaps. I know I don't anyway, and now it's become standard not to
do so for a significant part of the git-tracking world.

>> +#if !defined(__GLIBC__) && !__GLIBC_PREREQ(2, 1)
>> +# define strchrnul(s, c) gitstrchrnul(s, c)
>> +static inline char *gitstrchrnul(const char *s, int c)
>> +{
>> +       while (*s && *s != c)
>> +               s++;
>> +
>> +       return (char *)s;
>> +}
>> +#endif
>> +
> 
> This is good solution, although I'm not sure about the check itself.
> What if somebody has libc which is not glibc, but it does have
> strchrnul?
> 

They most likely fall into the minority that get to suffer from
using code that's as fast as what's in there today, although
a bit more readable. The glibc optimization is really only
worthwhile for architectures where strchrnul()-like operations
have microcode support, or when it's used on large strings.

YMMV. I suppose rewriting it as

#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 1)
# define HAVE_STRCHRNUL
#endif

#ifdef HAVE_STRCHRNUL
...

would work too, and will provide an easier way out for other fellas
wanting to say "Hey, my favourite solaris libc has this too!". OTOH,
that rewrite can be done when the first such case appears.


>> diff --git a/builtin-fetch--tool.c b/builtin-fetch--tool.c
> 
> This IMHO should go to separate patch.
> 

*shrug* Rene had it in his. Monkey see monkey do ;-)

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

^ permalink raw reply

* Re: cogito remote branch
From: Johannes Schindelin @ 2007-11-09 14:17 UTC (permalink / raw)
  To: MichaelTiloDressel@t-online.de; +Cc: Andreas Ericsson, git
In-Reply-To: <1IqUGN-1XXOVs0@fwd33.aul.t-online.de>

Hi,

On Fri, 9 Nov 2007, MichaelTiloDressel@t-online.de wrote:

> Such a pity.  We just got used to it.

It's open source.  You are free to use/maintain it.

Ciao,
Dscho

^ permalink raw reply

* Re: [BUG] git-rebase fails when a commit message contains a diff
From: Johannes Schindelin @ 2007-11-09 14:18 UTC (permalink / raw)
  To: Steffen Prohaska; +Cc: Junio C Hamano, Jonas Fonseca, git
In-Reply-To: <B2BAA0E1-8DA7-417D-AE25-53D8690810ED@zib.de>

Hi,

On Fri, 9 Nov 2007, Steffen Prohaska wrote:

> On Nov 9, 2007, at 2:51 AM, Junio C Hamano wrote:
> 
> > Junio C Hamano <gitster@pobox.com> writes:
> > 
> > > That's a known design limitation of applymbox/mailinfo.  Any
> > > line that looks like a beginning of a patch in e-mail ("^--- ",
> > > "^---$", "^diff -", and "^Index: ") terminates the commit log.
> > 
> > Ok, so that explains the symptom.  What's the next step?
> > 
> >  * The applymbox/mailinfo pair should continue to split the
> >    commit log message at the first such line.  There is no point
> >    breaking established workflow, and people in communities that
> >    exchange patches via e-mail already know to avoid this issue
> >    by indenting quoted diff snippet in the log message,
> >    e.g. 5be507fc.
> 
> I wasn't aware of this.

But there's a really easy workaround: use --merge with git rebase.

Ciao,
Dscho

^ permalink raw reply

* Re: [BUG] git-rebase fails when a commit message contains a diff
From: Johannes Schindelin @ 2007-11-09 14:19 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jonas Fonseca, git
In-Reply-To: <7v1wb0xhxq.fsf@gitster.siamese.dyndns.org>

Hi,

On Thu, 8 Nov 2007, Junio C Hamano wrote:

> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > On Thu, 8 Nov 2007, Junio C Hamano wrote:
> >
> >> I wonder if this is a sensible thing to do, regardless of the issue 
> >> of commit log message that contains anything.
> >> 
> >> The patch replaces git-rebase with git-rebase--interactive.  The only 
> >> difference from the existing "git-rebase -i" is if the command is 
> >> called without "-i" the initial "here is the to-do list. please 
> >> rearrange the lines, modify 'pick' to 'edit' or whatever as 
> >> appropriate" step is done without letting the user edit the list.
> >
> > Hmm.  I don't know, really.  I had the impression that the "git 
> > format-patch | git am" pipeline would be faster.
> 
> Heh, I did not read rebase--interactive carefully enough.
> 
> Unless told to use merge with "rebase -m", rebase replays the change by 
> extracting and applying patches, and speed comparison was about that vs 
> merge based replaying; I thought make_patch was done in order to avoid 
> using cherry-pick (which is based on merge-recursive) and doing patch 
> application with three-way fallback.  Apparently that is not what 
> "interactive" does.
> 
> Perhaps pick_one () could be taught to perform the 3-way fallback dance 
> git-am plays correctly.  The patch I sent to make 
> git-rebase--interactive take over git-rebase would then become quite 
> reasonable, I would think.

I have a different idea: How about changing cherry-pick to try a simple 
patch first?  If that fails, we can always go back to merge-recursive (or 
merge-nu once that is ready).

Ciao,
Dscho

^ permalink raw reply

* fatal: serious inflate inconsistency
From: bob @ 2007-11-09 14:14 UTC (permalink / raw)
  To: git

	From: 	  kranki@mac.com
	Subject: 	fatal: serious inflate inconsistency
	Date: 	November 8, 2007 10:56:02 PM EST
	To: 	  majordomo@vger.kernel.org

Hi, list.

Sorry, but I am not that familiar with git's internal workings,
but here is a failure that I can consistently create.  I am
running MacOSX 10.4.10 with git compiled from source.
Here is the problem output that I am receiving:

apple07:~/rmwHtmlOld bob$ git version
git version 1.5.3.5
apple07:~/rmwHtmlOld bob$ git init
Initialized empty Git repository in .git/
apple07:~/rmwHtmlOld bob$ git add .
apple07:~/rmwHtmlOld bob$ git commit --all
Created initial commit 49b4183:   Initial commit
10993 files changed, 3615639 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
create mode 100755 bk.sh
.
.
.
create mode 100755 ter/webalizer/webalizer.hist
apple07:~/rmwHtmlOld bob$ cd ..
apple07:~ bob$ mkdir rmwHtml.git
apple07:~ bob$ cd rmwHtml.git/
apple07:~/rmwHtml.git bob$ git --bare init --share
usage: git-init [-q | --quiet] [--template=<template-directory>] [-- 
shared]
apple07:~/rmwHtml.git bob$ git --bare init --shared
Initialized empty shared Git repository in /Users/bob/rmwHtml.git/
apple07:~/rmwHtml.git bob$ git --bare fetch ../rmwHtmlOld master:master
warning: no common commits
remote: Generating pack...
remote: Done counting 11402 objects.
remote: Deltifying 11402 objects...
remote:  100% (11402/11402) done
Indexing 11402 objects...
100% (11402/11402) done
Resolving 3356 deltas...
fatal: serious inflate inconsistency
remote: Total 11402 (delta 3356), reused 0 (delta 0)
fatal: index-pack died with error code 128
fatal: Fetch failure: ../rmwHtmlOld
apple07:~/rmwHtml.git bob$

The ... represent about 11,000 files that I did not feel needed to be  
included.
The total directory being put in the repository is about 4gig.

There are two files that are about 1.0gig each.  I had them as one which
in MacOSX 10.4.10 showed as 1.88gig and think that this may be the
problem, but don't know why since my searches show that git should
handle files up to 2gig.  If I am wrong and there is a lesser limit,  
then
I apologize.

I have this directory, rmwHtmlOld, saved as a tarball and can recreate
the above as needed.

I apologize if I am doing something wrong that I am not aware of.
I use git for several different projects and have no problem with them.
I would appreciate any help that you can provide.  Thank you for
your time.

^ permalink raw reply

* Re: [BUG] git-rebase fails when a commit message contains a diff
From: Steffen Prohaska @ 2007-11-09 14:29 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Junio C Hamano, Jonas Fonseca, git
In-Reply-To: <Pine.LNX.4.64.0711091417500.4362@racer.site>


On Nov 9, 2007, at 3:18 PM, Johannes Schindelin wrote:

> Hi,
>
> On Fri, 9 Nov 2007, Steffen Prohaska wrote:
>
>> On Nov 9, 2007, at 2:51 AM, Junio C Hamano wrote:
>>
>>> Junio C Hamano <gitster@pobox.com> writes:
>>>
>>>> That's a known design limitation of applymbox/mailinfo.  Any
>>>> line that looks like a beginning of a patch in e-mail ("^--- ",
>>>> "^---$", "^diff -", and "^Index: ") terminates the commit log.
>>>
>>> Ok, so that explains the symptom.  What's the next step?
>>>
>>>  * The applymbox/mailinfo pair should continue to split the
>>>    commit log message at the first such line.  There is no point
>>>    breaking established workflow, and people in communities that
>>>    exchange patches via e-mail already know to avoid this issue
>>>    by indenting quoted diff snippet in the log message,
>>>    e.g. 5be507fc.
>>
>> I wasn't aware of this.
>
> But there's a really easy workaround: use --merge with git rebase.

It's no longer a problem for me. I now know the limitation and
the work around. But others could get bitten, too. We could
save them.

	Steffen

^ permalink raw reply

* linux-2.6 clone with CygWin git
From: Medve Emilian @ 2007-11-09 14:29 UTC (permalink / raw)
  To: git

Hello,


I noticed that something might not be right with my CygWin git (latest
CygWin relevant build packages + a few days old git build from the next
& master branches). When I clone, say,  Linus' tree over the native git
protocol everything goes fine but a git-status shows this:

$ git-status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#       modified:   include/linux/netfilter/xt_CONNMARK.h
#       modified:   include/linux/netfilter/xt_DSCP.h
#       modified:   include/linux/netfilter/xt_MARK.h
#       modified:   include/linux/netfilter/xt_TCPMSS.h
#       modified:   include/linux/netfilter_ipv4/ipt_CONNMARK.h
#       modified:   include/linux/netfilter_ipv4/ipt_DSCP.h
#       modified:   include/linux/netfilter_ipv4/ipt_ECN.h
#       modified:   include/linux/netfilter_ipv4/ipt_MARK.h
#       modified:   include/linux/netfilter_ipv4/ipt_TCPMSS.h
#       modified:   include/linux/netfilter_ipv4/ipt_TOS.h
#       modified:   include/linux/netfilter_ipv4/ipt_TTL.h
#       modified:   include/linux/netfilter_ipv6/ip6t_HL.h
#       modified:   include/linux/netfilter_ipv6/ip6t_MARK.h
#       modified:   net/ipv4/netfilter/ipt_ECN.c
#       modified:   net/ipv4/netfilter/ipt_TOS.c
#       modified:   net/ipv4/netfilter/ipt_TTL.c
#       modified:   net/ipv6/netfilter/ip6t_HL.c
#       modified:   net/netfilter/xt_CONNMARK.c
#       modified:   net/netfilter/xt_DSCP.c
#       modified:   net/netfilter/xt_MARK.c
#       modified:   net/netfilter/xt_TCPMSS.c
#
no changes added to commit (use "git add" and/or "git commit -a")

git-fsck --strict --full finds no fault in the clone, git-reset --hard
goes fine but changes nothing in the output of git-status. Some
additional superficial investigation showed that git-diff doesn't even
compare my checked out tree against the latest commit. Checkout of
various commits shows the same issue.

Can somebody please double-check this scenario for me just to validate
that this happens only due to some particular factors combination on my
box?


Thanks,
Emil.

^ permalink raw reply

* Re: [PATCH] Make builtin-tag.c use parse_options.
From: Johannes Schindelin @ 2007-11-09 14:31 UTC (permalink / raw)
  To: Jakub Narebski; +Cc: git, jasampler
In-Reply-To: <fh1p10$nta$1@ger.gmane.org>

Hi,

[re Cc:ing jasam]

On Fri, 9 Nov 2007, Jakub Narebski wrote:

> Carlos Rica wrote:
> 
> > +     struct option options[] = {
> > +             { OPTION_STRING, 'l', NULL, &list, "pattern", "list tag names",
> > +                     PARSE_OPT_OPTARG, NULL, (intptr_t) no_pattern },
> 
> > +             OPT_STRING('F', NULL, &msgfile, "file", "message in a file"),
> 
> Does it matter that you use OPTION_STRING here and OPT_STRING macro there?

I guess it is because of the PARSE_OPT_OPTARG thing, together with 
no_pattern.  We need to know if -l was specified, even if no argument was 
passed in.

Hth,
Dscho

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox