* Re: [RFC] Teach git-branch howto rename a branch
From: Lars Hjemli @ 2006-11-25 8:52 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, Shawn Pearce
In-Reply-To: <7v1wns6q41.fsf@assigned-by-dhcp.cox.net>
On 11/25/06, Junio C Hamano <junkio@cox.net> wrote:
> Lars Hjemli <hjemli@gmail.com> writes:
>
> > +static void rename_branch(const char *newname, const char *oldname, int force, int reflog)
> > +{
> > + char ref[PATH_MAX];
> > +
> > + snprintf(ref, sizeof ref, "refs/heads/%s", oldname);
> > + if (check_ref_format(ref))
> > + die("'%s' is not a valid branch name.", oldname);
> > +
> > + newname = create_branch(newname, oldname, force, reflog);
>
> This does not feel right. The 'start' parameter to
> create_branch is arbitrary SHA-1 expression so it can take
> 'master', 'heads/master' and 'refs/heads/master' to mean the
> same thing, as long as they are unambiguous, but here you would
> want to accept only 'master' because the paramter is supposed to
> be the name of the branch you are renaming. create_branch()
> does not want to do that check for its start parameter, so you
> should do the checking yourself here, and check_ref_format() is
> not good enough for that. Probably calling resolve_ref() on ref
> (= "refs/heads/oldname") for reading (because you also want to
> make sure oldname talks about an existing branch) is needed.
I forgot to use the handcrafted ref when calling 'create_branch':
newname = create_branch(newname, ref, force, reflog);
This would force the 'refs/heads' prefix, but let 'create_branch'
check if it's a valid commit reference. I _think_ this would be good
enough....
>
> > + if (!strcmp(oldname, head)) {
> > + create_symref("HEAD", newname);
> > + head = newname + 11;
> > + }
> > + delete_branch(oldname, force, NULL);
> > }
>
> What is the right thing that should happen when newname talks
> about an existing branch (I am not asking "what does your code
> do?")?
>
> Without -f, it should barf. With -f, we would want the rename
> to happen. In the latter case, I think it should work the same
> way as deleting it and creating it anew, and that would make
> sure that reflog for the old one will be lost and a new log is
> started afresh; otherwise, the log would say old history for
> that branch and it won't be a "rename" anymore.
Yes, the missing piece here is to copy the 'old' reflog to it's new
location after the call to create_branch. I belive create_branch
handles the -f cases.
> Also what happens when oldname is "frotz" and newname is
> "frotz/nitfol"? You would need to read the value of "frotz",
> make sure you can delete it (perhaps the usual fast-forward
> check as needed), and delete it to make room and then create
> "frotz/nitfol". I suspect your patch does not handle that
> case.
Hmm, you're right, I didn't think of such renaming. But I don't want
to delete the old ref before the new one is in place. How about
renaming the old one to a temporary name first?
I'l redo the patch on top of your 'git-branch -D' fix
--
^ permalink raw reply
* Re: [RFC] Teach git-branch howto rename a branch
From: Shawn Pearce @ 2006-11-25 8:57 UTC (permalink / raw)
To: Jakub Narebski; +Cc: git
In-Reply-To: <ek9078$m2j$1@sea.gmane.org>
Jakub Narebski <jnareb@gmail.com> wrote:
> Shawn Pearce wrote:
>
> > Junio C Hamano <junkio@cox.net> wrote:
> >> Without -f, it should barf. With -f, we would want the rename
> >> to happen. In the latter case, I think it should work the same
> >> way as deleting it and creating it anew, and that would make
> >> sure that reflog for the old one will be lost and a new log is
> >> started afresh; otherwise, the log would say old history for
> >> that branch and it won't be a "rename" anymore.
> >
> > This patch doesn't rename the reflog when the branch renames.
> > Myself and a few other users I support want the reflog preserved
> > when a branch renames, we all see the reflog as part of the history
> > of that branch and a rename is the same branch but stored under a
> > different name...
>
> And of course reflog should store the fact of renaming branch.
Yes, I think that's a worthwhile thing to log. Problem is the
logging system tends to throw away pointless entries (sha1 ->
same sha1) so the rename log entry needs to be forced somehow...
Although without a UI to show the content of the reflog having the
rename entry in there isn't all that critical.
> > I had planned to do a rename branch command myself, but its been
> > lower priority than everything else, so I have just never gotten
> > around to it. I'm glad to see someone is attempting it!
>
> I have thought that command to rename branch was created to deal
> with simultaneous renaming of reflog + marking rename in reflog.
Yes, that's one of the complex parts of it. :-)
--
^ permalink raw reply
* Re: [RFC] Teach git-branch howto rename a branch
From: Lars Hjemli @ 2006-11-25 9:16 UTC (permalink / raw)
To: Shawn Pearce; +Cc: Jakub Narebski, git
In-Reply-To: <20061125085731.GG4528@spearce.org>
On 11/25/06, Shawn Pearce <spearce@spearce.org> wrote:
> Jakub Narebski <jnareb@gmail.com> wrote:
> >
> > And of course reflog should store the fact of renaming branch.
>
> Yes, I think that's a worthwhile thing to log. Problem is the
> logging system tends to throw away pointless entries (sha1 ->
> same sha1) so the rename log entry needs to be forced somehow...
Is it ok to put
static int log_ref_write(struct ref_lock *lock,
const unsigned char *sha1, const char *msg)
into refs.h?
Then it should be possibly to do something like this:
lock = lock_ref_sha1(ref, sha1);
lock->force_write = 1;
log_ref_write(lock, sha1, "Renamed oldname to newname");
unlock_ref(lock);
...after moving the reflog...
--
^ permalink raw reply
* Re: [PATCH] gitweb: Do not use esc_html in esc_path
From: Junio C Hamano @ 2006-11-25 9:45 UTC (permalink / raw)
To: Jakub Narebski; +Cc: git
In-Reply-To: <11644442392444-git-send-email-jnareb@gmail.com>
Jakub Narebski <jnareb@gmail.com> writes:
> Do not use esc_html in esc_path subroutine to avoid double quoting;
> expand esc_html body (except quoting) in esc_path.
>
> Move esc_path before quot_cec and quot_upr. Add some comments.
>
> Signed-off-by: Jakub Narebski <jnareb@gmail.com>
> ---
> This patch was send to git mailing list; I don't know if it
> was missed, or rejected.
I do not remember looking at it deeply, so probably it was just
lost in the noise.
Unless there was a list discussion that was unfavorable, that
is; but I do not recall one and the patch looks sane.
^ permalink raw reply
* Re: [PATCH] gitweb: Do not use esc_html in esc_path
From: Jakub Narebski @ 2006-11-25 9:54 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <7v3b876esd.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano wrote:
> Jakub Narebski <jnareb@gmail.com> writes:
>
>> ---
>> This patch was send to git mailing list; I don't know if it
>> was missed, or rejected.
>
> I do not remember looking at it deeply, so probably it was just
> lost in the noise.
>
> Unless there was a list discussion that was unfavorable, that
> is; but I do not recall one and the patch looks sane.
There was no discussion, so probably the patch was just lost in the
noise. It happens.
--
Jakub Narebski
^ permalink raw reply
* What's in git.git
From: Junio C Hamano @ 2006-11-25 10:12 UTC (permalink / raw)
To: git; +Cc: linux-kernel
Executive Summary
=================
The 'maint' branch still has a handful more post v1.4.4.1
fixes.
Aside from the usual gitweb and git-svn updates, the 'master'
branch has one notable change that everybody should hopefully
welcome. separate-remote layout is now the default for newly
cloned repositories. We would be needing documentation updates
and probably some more minor fixes for fallout from this, but I
do not expect anything majorly broken.
Cooking in 'next' are handful topics:
* "git shortlog bottom..top" can be used instead of a pipeline
"git log bottom..top | git shortlog".
* "git merge -m message <commit>" is another natural way to
perform a local merge, in addition to the traditional
"git pull . <localbranch>". The former is more powerful in
that it can take arbitrary <committish>, not just a ref.
* The new "--depth $n" parameter to git clone/fetch tries to
limit the commit ancestry depth to $n. This still has known
issues (for example, shallowly cloning the git.git repository
and then deepening the result with large --depth parameter
later does not seem to make the resulting repository fully
connected, and fsck-objects reports corruption), so please
handle it with care.
* "git show-ref", especially the "-d" variant, is much more
efficient when used in a repository with pack-pruned refs.
* "git fetch" can fetch from a repository with pack-pruned refs
over dumb protocol transports.
* "git push $URL '':$ref" can be used to delete an existing ref
from the remote side.
* A glob pattern "Pull: refs/heads/*:refs/remotes/origin/*" is
allowed in the remotes file. The fetch can be forced by
prefixing the specification with a '+'.
Currently 'pu' does not have much to speak of.
This update has rather large impact so the kernel list is CC'ed.
----------------------------------------------------------------
* The 'maint' branch has these fixes since the last announcement.
Andy Parkins (1):
Increase length of function name buffer
Eric Wong (3):
git-svn: error out from dcommit on a parent-less commit
git-svn: correctly handle revision 0 in SVN repositories
git-svn: preserve uncommitted changes after dcommit
René Scharfe (1):
archive-zip: don't use sizeof(struct ...)
* The 'master' branch has these since the last announcement.
Andy Parkins (3):
Improve git-prune -n output
Add support to git-branch to show local and remote branches
Increase length of function name buffer
Eric Wong (6):
git-svn: error out from dcommit on a parent-less commit
git-svn: correctly handle revision 0 in SVN repositories
git-svn: preserve uncommitted changes after dcommit
git-svn: handle authentication without relying on cached tokens on disk
git-svn: correctly access repos when only given partial read permissions
git-svn: exit with status 1 for test failures
Iñaki Arenaza (1):
git-cvsimport: add support for CVS pserver method HTTP/1.x proxying
Jakub Narebski (8):
gitweb: Protect against possible warning in git_commitdiff
gitweb: Buffer diff header to deal with split patches + git_patchset_body refactoring
gitweb: Default to $hash_base or HEAD for $hash in "commit" and "commitdiff"
gitweb: New improved formatting of chunk header in diff
gitweb: Add an option to href() to return full URL
gitweb: Refactor feed generation, make output prettier, add Atom feed
gitweb: Finish restoring "blob" links in git_difftree_body
gitweb: Replace SPC with also in tag comment
Junio C Hamano (9):
upload-pack: stop the other side when they have more roots than we do.
apply --numstat: mark binary diffstat with - -, not 0 0
pack-objects: tweak "do not even attempt delta" heuristics
refs outside refs/{heads,tags} match less strongly.
Typefix builtin-prune.c::prune_object()
gitweb: (style) use chomp without parentheses consistently.
git-clone: stop dumb protocol from copying refs outside heads/ and tags/.
git-branch -D: make it work even when on a yet-to-be-born branch
git-fetch: exit with non-zero status when fast-forward check fails
Lars Hjemli (1):
Add -v and --abbrev options to git-branch
Peter Baumann (1):
config option log.showroot to show the diff of root commits
Petr Baudis (1):
Make git-clone --use-separate-remote the default
René Scharfe (1):
archive-zip: don't use sizeof(struct ...)
* The 'next' branch, in addition, has these.
Alexandre Julliard (6):
Shallow clone: do not ignore shallowness when following tags
fetch-pack: Properly remove the shallow file when it becomes empty.
upload-pack: Check for NOT_SHALLOW flag before sending a shallow to the client.
git-fetch: Reset shallow_depth before auto-following tags.
get_shallow_commits: Avoid memory leak if a commit has been reached already.
fetch-pack: Do not fetch tags for shallow clones.
Jakub Narebski (1):
gitweb: Do not use esc_html in esc_path
Johannes Schindelin (10):
Build in shortlog
shortlog: do not crash on parsing "[PATCH"
shortlog: read mailmap from ./.mailmap again
shortlog: handle email addresses case-insensitively
shortlog: fix "-n"
upload-pack: no longer call rev-list
support fetching into a shallow repository
allow cloning a repository "shallowly"
allow deepening of a shallow repository
add tests for shallow stuff
Junio C Hamano (19):
Store peeled refs in packed-refs file.
remove merge-recursive-old
git-merge: make it usable as the first class UI
merge: allow merging into a yet-to-be-born branch.
git-diff/git-apply: make diff output a bit friendlier to GNU patch (part 2)
Store peeled refs in packed-refs (take 2).
git-fetch: reuse ls-remote result.
git-fetch: fix dumb protocol transport to fetch from pack-pruned ref
git-fetch: allow glob pattern in refspec
Allow git push to delete remote ref.
We should make sure that the protocol is still extensible.
Why does it mean we do not have to register shallow if we have one?
Why didn't we mark want_obj as ~UNINTERESTING in the old code?
shallow clone: unparse and reparse an unshallowed commit
git-shortlog: fix common repository prefix abbreviation.
git-shortlog: make common repository prefix configurable with .mailmap
git-commit: show --summary after successful commit.
git-fetch: allow forcing glob pattern in refspec
fetch-pack: do not barf when duplicate re patterns are given
Nicolas Pitre (1):
builtin git-shortlog is broken
* The 'pu' branch, in addition, has these.
Junio C Hamano (4):
para-walk: walk n trees, index and working tree in parallel
rev-list --left-right
blame: --show-stats for easier optimization work.
gitweb: steal loadavg throttle from kernel.org
^ permalink raw reply
* [PATCH (amend)] gitweb: Use git-show-ref instead of git-peek-remote
From: Jakub Narebski @ 2006-11-25 10:18 UTC (permalink / raw)
To: git, Junio C Hamano; +Cc: Jakub Narebski
In-Reply-To: <7vhcwoa3mx.fsf@assigned-by-dhcp.cox.net>
Use "git show-ref --dereference" instead of "git peek-remote
$projectroot/project" in git_get_references. git-show-ref is faster
than git-peek-remote (40ms vs 56ms user+sys for git.git repository);
even faster is reading info/refs file (if it exists), but the
information in info/refs can be stale; that and the fact that
info/refs is meant for dumb protocol transports, not for gitweb.
git-show-ref is available since v1.4.4; the output format is slightly
different than git-peek-remote output format.
While at it make git_get_references return hash in list context,
and reference to hash (as it used to do) in scalar and void contexts.
Additionally this change makes all git commands invocations (except
the one used to get version of git core tools) go through git_cmd()
subroutine.
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
Junio C Hamano wrote:
> Jakub Narebski <jnareb@gmail.com> writes:
>
>> Use "git show-ref --dereference" instead of "git peek-remote ." in
>> git_get_references. git-show-ref is faster than git-peek-remote; even
>> faster is reading info/refs file (if it exists), but the information
>> in info/refs can be stale.
>
> More importantly, it is for dumb protocol transports, not for gitweb.
Mentioned in commit message.
> You forgot to mention that you fixed the last place that
> directly used "$GIT" to invoke the command, bypassing sub
> git_cmd. That is a consistency clean-up worth mentioning.
This is not fix, this is change of style. The style was to use
git peek-remote $projectroot/$project
instead of equivalent
git --git-dir=$projectroot/$project peek-remote .
We don't have this choice with git-show-ref.
On the other hand that makes all command invocation (except the one
used for getting git core version) pass through git_cmd() subroutine.
So yes, it is consistency clean-up.
>> git-show-ref is available since v1.4.4; the output format is slightly
>> different than git-peek-remote output format.
>
>> - if ($line =~ m/^([0-9a-fA-F]{40})\trefs\/($type\/?[^\^]+)/) {
>> + if ($line =~ m/^([0-9a-fA-F]{40}) refs\/($type\/?[^\^]+)/) {
>
> I would rather do:
>
> m|^([0-9a-f]{40})\srefs/($type/?[^^]+)|
>
> which would catch both space and tab.
This addresses those concerns.
gitweb/gitweb.perl | 23 +++++++++++++++--------
1 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index f06cd3e..2ebd9d7 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1154,14 +1154,15 @@ sub git_get_last_activity {
sub git_get_references {
my $type = shift || "";
my %refs;
- # 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11
- # c39ae07f393806ccf406ef966e9a15afc43cc36a refs/tags/v2.6.11^{}
- open my $fd, "-|", $GIT, "peek-remote", "$projectroot/$project/"
+ # 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11
+ # c39ae07f393806ccf406ef966e9a15afc43cc36a refs/tags/v2.6.11^{}
+ open my $fd, "-|", git_cmd(), "show-ref", "--dereference",
+ ($type ? ("--", "refs/$type") : ()) # use -- <pattern> if $type
or return;
while (my $line = <$fd>) {
chomp $line;
- if ($line =~ m/^([0-9a-fA-F]{40})\trefs\/($type\/?[^\^]+)/) {
+ if ($line =~ m!^([0-9a-fA-F]{40})\srefs/($type/?[^^]+)!) {
if (defined $refs{$1}) {
push @{$refs{$1}}, $2;
} else {
@@ -1170,7 +1171,7 @@ sub git_get_references {
}
}
close $fd or return;
- return \%refs;
+ return wantarray ? %refs : \%refs;
}
sub git_get_rev_name_tags {
@@ -1293,8 +1294,9 @@ sub parse_commit {
$co{'author'} = $1;
$co{'author_epoch'} = $2;
$co{'author_tz'} = $3;
- if ($co{'author'} =~ m/^([^<]+) </) {
- $co{'author_name'} = $1;
+ if ($co{'author'} =~ m/^([^<]+) <([^>]*)>/) {
+ $co{'author_name'} = $1;
+ $co{'author_email'} = $2;
} else {
$co{'author_name'} = $co{'author'};
}
@@ -1303,7 +1305,12 @@ sub parse_commit {
$co{'committer_epoch'} = $2;
$co{'committer_tz'} = $3;
$co{'committer_name'} = $co{'committer'};
- $co{'committer_name'} =~ s/ <.*//;
+ if ($co{'committer'} =~ m/^([^<]+) <([^>]*)>/) {
+ $co{'committer_name'} = $1;
+ $co{'committer_email'} = $2;
+ } else {
+ $co{'committer_name'} = $co{'committer'};
+ }
}
}
if (!defined $co{'tree'}) {
--
1.4.4.1
^ permalink raw reply related
* Re: [PATCH (amend)] gitweb: Use git-show-ref instead of git-peek-remote
From: Jakub Narebski @ 2006-11-25 10:24 UTC (permalink / raw)
To: git
In-Reply-To: <11644499234152-git-send-email-jnareb@gmail.com>
Jakub Narebski wrote:
Ooops. This is a part of next patch to send. Please delete this two chunks.
Sorry for the mistake.
> @@ -1293,8 +1294,9 @@ sub parse_commit {
> $co{'author'} = $1;
> $co{'author_epoch'} = $2;
> $co{'author_tz'} = $3;
> - if ($co{'author'} =~ m/^([^<]+) </) {
> - $co{'author_name'} = $1;
> + if ($co{'author'} =~ m/^([^<]+) <([^>]*)>/) {
> + $co{'author_name'} = $1;
> + $co{'author_email'} = $2;
> } else {
> $co{'author_name'} = $co{'author'};
> }
> @@ -1303,7 +1305,12 @@ sub parse_commit {
> $co{'committer_epoch'} = $2;
> $co{'committer_tz'} = $3;
> $co{'committer_name'} = $co{'committer'};
> - $co{'committer_name'} =~ s/ <.*//;
> + if ($co{'committer'} =~ m/^([^<]+) <([^>]*)>/) {
> + $co{'committer_name'} = $1;
> + $co{'committer_email'} = $2;
> + } else {
> + $co{'committer_name'} = $co{'committer'};
> + }
> }
> }
> if (!defined $co{'tree'}) {
--
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
^ permalink raw reply
* [PATCH (take 3)] gitweb: Use git-show-ref instead of git-peek-remote
From: Jakub Narebski @ 2006-11-25 10:32 UTC (permalink / raw)
To: git, Junio C Hamano; +Cc: Jakub Narebski
In-Reply-To: <7vhcwoa3mx.fsf@assigned-by-dhcp.cox.net>
Use "git show-ref --dereference" instead of "git peek-remote
$projectroot/project" in git_get_references. git-show-ref is faster
than git-peek-remote (40ms vs 56ms user+sys for git.git repository);
even faster is reading info/refs file (if it exists), but the
information in info/refs can be stale; that and the fact that
info/refs is meant for dumb protocol transports, not for gitweb.
git-show-ref is available since v1.4.4; the output format is slightly
different than git-peek-remote output format.
While at it make git_get_references return hash in list context,
and reference to hash (as it used to do) in scalar and void contexts.
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
This is the final version.
Once again, I'm extremly sorry for the confusion with the previous
version...
gitweb/gitweb.perl | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index f06cd3e..1cded75 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1154,14 +1154,15 @@ sub git_get_last_activity {
sub git_get_references {
my $type = shift || "";
my %refs;
- # 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11
- # c39ae07f393806ccf406ef966e9a15afc43cc36a refs/tags/v2.6.11^{}
- open my $fd, "-|", $GIT, "peek-remote", "$projectroot/$project/"
+ # 5dc01c595e6c6ec9ccda4f6f69c131c0dd945f8c refs/tags/v2.6.11
+ # c39ae07f393806ccf406ef966e9a15afc43cc36a refs/tags/v2.6.11^{}
+ open my $fd, "-|", git_cmd(), "show-ref", "--dereference",
+ ($type ? ("--", "refs/$type") : ()) # use -- <pattern> if $type
or return;
while (my $line = <$fd>) {
chomp $line;
- if ($line =~ m/^([0-9a-fA-F]{40})\trefs\/($type\/?[^\^]+)/) {
+ if ($line =~ m!^([0-9a-fA-F]{40})\srefs/($type/?[^^]+)!) {
if (defined $refs{$1}) {
push @{$refs{$1}}, $2;
} else {
@@ -1170,7 +1171,7 @@ sub git_get_references {
}
}
close $fd or return;
- return \%refs;
+ return wantarray ? %refs : \%refs;
}
sub git_get_rev_name_tags {
--
1.4.4.1
^ permalink raw reply related
* Re: [RFC] Teach git-branch howto rename a branch
From: Junio C Hamano @ 2006-11-25 10:35 UTC (permalink / raw)
To: Lars Hjemli; +Cc: git, Shawn Pearce
In-Reply-To: <8c5c35580611250116h466e3649p2630ee6641b6e6f4@mail.gmail.com>
"Lars Hjemli" <lh@elementstorage.no> writes:
> Is it ok to put
>
> static int log_ref_write(struct ref_lock *lock,
> const unsigned char *sha1, const char *msg)
>
> into refs.h?
I think a cleaner implementation that does not have such a
layering violation would involve defining rename_refs()
interface in refs.c, next to the delete_ref() that exists there.
The division of labor would be for builtin-branch.c to make sure
both oldname and newname are branch names, and rename_refs() to
rename the reflog (if exists) and the ref at the same time. To
deal with D/F conflicts sanely, I suspect it would involve a
call to rename(2) to move the reflog to a temporary location,
perhaps $GIT_DIR/.tmp-renamed-log, deletion of the old ref by
calling delete_ref(), and then another rename(2) to move that
temporary one to its final location, followed by the usual "ref
creation dance" of calling lock_any_ref_for_update() and
write_ref_sha1().
Side note:
If we do not mind losing the reflog of oldname, then "delete and
then create" would be sufficient, but that is not the case.
Unlike "git does not track individual files so we do not record
renames" mantra, branches, and more in general, refs, have
meaningful identity (at least locally), and unlike the file
contents, the "contents" of a ref does not migrate _partially_
from ref to ref. It would make sense to keep track of renames
for them.
^ permalink raw reply
* Re: [RFC] Teach git-branch howto rename a branch
From: Fredrik Kuivinen @ 2006-11-25 10:39 UTC (permalink / raw)
To: Lars Hjemli; +Cc: git
In-Reply-To: <1164409429445-git-send-email-hjemli@gmail.com>
On 11/25/06, Lars Hjemli <hjemli@gmail.com> wrote:
> This adds a '--rename' option to git branch. If specified, branch
> creation becomes branch renaming.
>
> With a single branchname, the current branch is renamed and .git/HEAD is
> updated.
>
> With two branchnames, the second name is renamed to the first.
Nice idea. But wouldn't it be more sensible to rename the first branch to the
second instead of the other way around? That is, the syntax would be
git branch --rename FROM TO
which is more similar to how "mv" works.
^ permalink raw reply
* Re: [PATCH (take 3)] gitweb: Use git-show-ref instead of git-peek-remote
From: Junio C Hamano @ 2006-11-25 10:42 UTC (permalink / raw)
To: Jakub Narebski; +Cc: git
In-Reply-To: <11644507284105-git-send-email-jnareb@gmail.com>
Jakub Narebski <jnareb@gmail.com> writes:
> While at it make git_get_references return hash in list context,
> and reference to hash (as it used to do) in scalar and void contexts.
Why did you have to add this? Generally, context sensitive
returns make the program much harder to maintain, because it
forces the call sites to be extremely careful to choose between
"my ($foo) = func()" vs "my $foo = func()", and people who later
call the function inevitably make mistakes.
So unless there is a compelling reason, I'd rather not see more
"wantarray" in the program.
^ permalink raw reply
* Re: [RFC] Teach git-branch howto rename a branch
From: Lars Hjemli @ 2006-11-25 10:52 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git, Shawn Pearce
In-Reply-To: <7vd57b3jc2.fsf@assigned-by-dhcp.cox.net>
On 11/25/06, Junio C Hamano <junkio@cox.net> wrote:
> "Lars Hjemli" <lh@elementstorage.no> writes:
>
> > Is it ok to put
> >
> > static int log_ref_write(struct ref_lock *lock,
> > const unsigned char *sha1, const char *msg)
> >
> > into refs.h?
>
> I think a cleaner implementation that does not have such a
> layering violation would involve defining rename_refs()
> interface in refs.c, next to the delete_ref() that exists there.
Yes, that looks a lot nicer. I'll give it a try.
--
^ permalink raw reply
* Re: [RFC] Teach git-branch howto rename a branch
From: Lars Hjemli @ 2006-11-25 11:00 UTC (permalink / raw)
To: Fredrik Kuivinen; +Cc: git
In-Reply-To: <4c8ef70611250239h4e03b9c7k971b60187aa0f56d@mail.gmail.com>
On 11/25/06, Fredrik Kuivinen <frekui@gmail.com> wrote:
> On 11/25/06, Lars Hjemli <hjemli@gmail.com> wrote:
> > This adds a '--rename' option to git branch. If specified, branch
> > creation becomes branch renaming.
> >
> > With a single branchname, the current branch is renamed and .git/HEAD is
> > updated.
> >
> > With two branchnames, the second name is renamed to the first.
>
> Nice idea. But wouldn't it be more sensible to rename the first branch to the
> second instead of the other way around? That is, the syntax would be
>
> git branch --rename FROM TO
>
> which is more similar to how "mv" works.
>
Possibly, but then we would have
git branch newbranch [oldbranch]
when creating a new branch, and
git branch --rename [oldbranch] newbranch
for rename/move.
I'd prefer to be "internally consistent", but it does look and feel a
little strange...
Another option would be:
git branch [--rename] [--from <branch>] newbranch
and deprecate the usage of two unnamed argumens for create/rename
--
^ permalink raw reply
* Re: [PATCH (take 3)] gitweb: Use git-show-ref instead of git-peek-remote
From: Jakub Narebski @ 2006-11-25 11:08 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <7v7ixj3izw.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano wrote:
> Jakub Narebski <jnareb@gmail.com> writes:
>
>> While at it make git_get_references return hash in list context,
>> and reference to hash (as it used to do) in scalar and void contexts.
>
> Why did you have to add this? Generally, context sensitive
> returns make the program much harder to maintain, because it
> forces the call sites to be extremely careful to choose between
> "my ($foo) = func()" vs "my $foo = func()", and people who later
> call the function inevitably make mistakes.
>
> So unless there is a compelling reason, I'd rather not see more
> "wantarray" in the program.
O.K. I have browsed through gitweb, and I see that we almost always
want the hashref, not hash (for passing further).
--
Jakub Narebski
^ permalink raw reply
* Re: [RFC] Submodules in GIT
From: Yann Dirson @ 2006-11-25 11:12 UTC (permalink / raw)
To: Shawn Pearce; +Cc: Linus Torvalds, Junio C Hamano, Jakub Narebski, git
In-Reply-To: <20061125065338.GC4528@spearce.org>
On Sat, Nov 25, 2006 at 01:53:38AM -0500, Shawn Pearce wrote:
> Yann Dirson <ydirson@altern.org> wrote:
> > We don't need to have commits in the tree for this. We'll just have
> > submodule commits which are not attached to a supermodule commit, and we
> > can access the whole submodule history through the submodule .git/HEAD,
> > just like we do for a standard git project.
>
> No. You cannot do that.
>
> How do we setup .git/HEAD when bisecting the supermodule?
> Or merging it? Or doing anything else with it?
Would there be any problem assuming git-update-ref would take care of
updating it ?
> Ideally the .git/HEAD of every submodule should seek to the commit
> that points at the tree of the submodule which the supermodule
> is referencing.
You mean, whenever we seek the HEAD of the supermodule, right ?
> This lets you then perform a bisect within the
> submodule when you identify the supermodule commit which caused
> the breakage.
That is, first bisect the supermodule (which naturally bisects the
submodule with rough granularity, assuming there are many submodule
commits for at least some supermodule commits), then bisect the submodule
between the two commits identified at supermodule level, right ?
> We need the submodule commits to do this. Doing it without is
> too expensive.
Maybe I missed something again, but I'm still not convinced :)
--
^ permalink raw reply
* Re: [PATCH] git-cvsimport: add suport for CVS pserver method HTTP/1.x proxying
From: Ignacio Arenaza @ 2006-11-25 12:43 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Martin Langhoff, git
In-Reply-To: <7v7ixlhesv.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> writes:
>>> It is more about HTTP proxying and it is my understanding that
>>> response to CONNECT method request has that empty line after the
>>> successful (2xx) response line and zero or more response
>>> headers. The code is still wrong; it does not have a loop to
>>> discard the potential response headers that come before the
>>> empty line the code we are discussing discards.
I don't have the original message from Junio where he asks where the
proxy behaviour is officially specified (as the draft has expired long
ago), so I'll answer it here.
There is a comment in the code that says the relevant RFC is 2817,
sections 5.2 and 5.3.
Saludos. Iñaki.
--
School of Management
Mondragon University
20560 Oñati - Spain
+34 943 718009 (ext. 225)
^ permalink raw reply
* Wierd tag errors from current 'next'
From: Andy Whitcroft @ 2006-11-25 13:32 UTC (permalink / raw)
To: Git Mailing List
I just was fetching some updates from a repository which I sync from CVS
into my development repository. I got the following wierd errors about
a tag during the fetch, it seemed to fix itself by the end ... hmmmm.
apw@pinky$ git --version
git version 1.4.4.1.g61fba
-apw
apw@pinky$ git fetch
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
remote: Generating pack...
remote: Done counting 42 objects.
remote: Result has 28 objects.
remote: Deltifying 28 objects.
remote: 100% (28/28) done
remote: Total 28, written 28 (delta 20), reused 20 (delta 12)
Unpacking 28 objects
100% (28/28) done
g* refs/heads/origin: fast forward to branch 'master' of
/home/apw/git/abat-up/
old..new: a6bb0e2..1063ab6
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
Auto-following refs/tags/v0_72_3
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
error: refs/tags/v0_72_3 does not point to a valid object!
remote: Generating pack...
remote: Done counting 0 objects.
Total 0, written 0 (delta 0), reused 0 (delta 0)
Unpacking 0 objects
* refs/tags/v0_72_3: storing tag 'v0_72_3' of /home/apw/git/abat-up/
commit: a38fa34
^ permalink raw reply
* cvsimport oddness
From: Andy Whitcroft @ 2006-11-25 13:33 UTC (permalink / raw)
To: Git Mailing List
skip patchset 2472: 1164219169 before 1164219362
skip patchset 2473: 1164219362 before 1164219362
Generating pack...
Done counting 14014 objects.
Deltifying 14014 objects.
100% (14014/14014) done
Writing 14014 objects.
100% (14014/14014) done
Total 14014, written 14014 (delta 9462), reused 13185 (delta 8872)
Pack pack-aca856ec2fa431ba3bbb975c67ed3a4dd5365a14 created.
DONE.
Already up-to-date.
apw@pinky$
Note that at the end we didn't get any additional revisions or commit
any additional commits. The repack seems excessive in this case.
^ permalink raw reply
* git on cygwin
From: Eric Blake @ 2006-11-25 14:38 UTC (permalink / raw)
To: git
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
I found the following patch useful for building git 1.4.4.1 on cygwin. As
of cygwin-1.5.22, C99 format strings are now supported (since I
contributed the newlib patch that added them). As of cygwin-1.5.21, d_ino
is now reliable for all cygwin filesystem accesses (except for some remote
NetApp drives, which have been fixed in cygwin CVS). And while it is true
that native Windows does not support symlinks, making NO_SYMLINK_HEAD a
good idea for native builds; this is not the case for cygwin, and I did
not seem to have any problems with removing it, either.
- --- origsrc/git-1.4.4.1/Makefile 2006-11-22 19:38:07.000000000 -0700
+++ src/git-1.4.4.1/Makefile 2006-11-24 17:51:00.600344000 -0700
@@ -369,11 +369,8 @@
endif
ifeq ($(uname_O),Cygwin)
NO_D_TYPE_IN_DIRENT = YesPlease
- - NO_D_INO_IN_DIRENT = YesPlease
NO_STRCASESTR = YesPlease
- - NO_SYMLINK_HEAD = YesPlease
NEEDS_LIBICONV = YesPlease
- - NO_C99_FORMAT = YesPlease
# There are conflicting reports about this.
# On some boxes NO_MMAP is needed, and not so elsewhere.
# Try uncommenting this if you see things break -- YMMV.
- --
Life is short - so eat dessert first!
Eric Blake ebb9@byu.net
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFFaFVe84KuGfSFAYARAjdrAJ9A+d9/aaEG0V2j8VTs/oycIpUS0wCeL/Ly
70V5CWHOrAKD7kI09gQiTh0=
=C8dP
^ permalink raw reply
* [PATCH 2/3] gitweb: Add author and contributor email to Atom feed
From: Jakub Narebski @ 2006-11-25 14:54 UTC (permalink / raw)
To: git; +Cc: Jakub Narebski
In-Reply-To: <11644664743455-git-send-email-jnareb@gmail.com>
Add author email (from 'author_email') and contributor email (from
'committer_email') to items in the Atom format gitweb feed.
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
gitweb/gitweb.perl | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 2ebd9d7..15dd1f4 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -4323,9 +4323,19 @@ XML
print "<entry>\n" .
"<title type=\"html\">" . esc_html($co{'title'}) . "</title>\n" .
"<updated>$cd{'iso-8601'}</updated>\n" .
- "<author><name>" . esc_html($co{'author_name'}) . "</name></author>\n" .
+ "<author>\n" .
+ " <name>" . esc_html($co{'author_name'}) . "</name>\n";
+ if ($co{'author_email'}) {
+ print " <email>" . esc_html($co{'author_email'}) . "</email>\n";
+ }
+ print "</author>\n" .
# use committer for contributor
- "<contributor><name>" . esc_html($co{'committer_name'}) . "</name></contributor>\n" .
+ "<contributor>\n" .
+ " <name>" . esc_html($co{'committer_name'}) . "</name>\n";
+ if ($co{'committer_email'}) {
+ print " <email>" . esc_html($co{'committer_email'}) . "</email>\n";
+ }
+ print "</contributor>\n" .
"<published>$cd{'iso-8601'}</published>\n" .
"<link rel=\"alternate\" type=\"text/html\" href=\"$co_url\" />\n" .
"<id>$co_url</id>\n" .
--
1.4.4.1
^ permalink raw reply related
* [PATCH 1/3] gitweb: Add author and committer email extraction to parse_commit
From: Jakub Narebski @ 2006-11-25 14:54 UTC (permalink / raw)
To: git; +Cc: Jakub Narebski
In-Reply-To: <11644664743455-git-send-email-jnareb@gmail.com>
Extract author email to 'author_email' key, and comitter mail to
'committer_mail' key; uniquify committer and author lines handling
by the way.
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
gitweb/gitweb.perl | 12 +++++++++---
1 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 1cded75..2ebd9d7 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -1294,8 +1294,9 @@ sub parse_commit {
$co{'author'} = $1;
$co{'author_epoch'} = $2;
$co{'author_tz'} = $3;
- if ($co{'author'} =~ m/^([^<]+) </) {
- $co{'author_name'} = $1;
+ if ($co{'author'} =~ m/^([^<]+) <([^>]*)>/) {
+ $co{'author_name'} = $1;
+ $co{'author_email'} = $2;
} else {
$co{'author_name'} = $co{'author'};
}
@@ -1304,7 +1305,12 @@ sub parse_commit {
$co{'committer_epoch'} = $2;
$co{'committer_tz'} = $3;
$co{'committer_name'} = $co{'committer'};
- $co{'committer_name'} =~ s/ <.*//;
+ if ($co{'committer'} =~ m/^([^<]+) <([^>]*)>/) {
+ $co{'committer_name'} = $1;
+ $co{'committer_email'} = $2;
+ } else {
+ $co{'committer_name'} = $co{'committer'};
+ }
}
}
if (!defined $co{'tree'}) {
--
1.4.4.1
^ permalink raw reply related
* [PATCH 3/3] gitweb: Use author_epoch for pubdate in gitweb feeds
From: Jakub Narebski @ 2006-11-25 14:54 UTC (permalink / raw)
To: git; +Cc: Jakub Narebski
In-Reply-To: <11644664743455-git-send-email-jnareb@gmail.com>
Use creation date (author_epoch) instead of former commit date
(committer_epoch) as publish date in gitweb feeds (RSS, Atom).
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
---
This I'm not so sure about. I just wonder why commit date was used
as publish date of feed item/entry...
gitweb/gitweb.perl | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 15dd1f4..fac7923 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -4201,7 +4201,7 @@ sub git_feed {
}
if (defined($revlist[0])) {
%latest_commit = parse_commit($revlist[0]);
- %latest_date = parse_date($latest_commit{'committer_epoch'});
+ %latest_date = parse_date($latest_commit{'author_epoch'});
print $cgi->header(
-type => $content_type,
-charset => 'utf-8',
@@ -4294,10 +4294,10 @@ XML
my $commit = $revlist[$i];
my %co = parse_commit($commit);
# we read 150, we always show 30 and the ones more recent than 48 hours
- if (($i >= 20) && ((time - $co{'committer_epoch'}) > 48*60*60)) {
+ if (($i >= 20) && ((time - $co{'author_epoch'}) > 48*60*60)) {
last;
}
- my %cd = parse_date($co{'committer_epoch'});
+ my %cd = parse_date($co{'author_epoch'});
# get list of changed files
open $fd, "-|", git_cmd(), "diff-tree", '-r', @diff_opts,
--
1.4.4.1
^ permalink raw reply related
* Re: git on cygwin
From: Jakub Narebski @ 2006-11-25 14:58 UTC (permalink / raw)
To: git
In-Reply-To: <4568555F.8050500@byu.net>
Eric Blake wrote:
> I found the following patch useful for building git 1.4.4.1 on cygwin. As
> of cygwin-1.5.22, C99 format strings are now supported (since I
> contributed the newlib patch that added them). As of cygwin-1.5.21, d_ino
> is now reliable for all cygwin filesystem accesses (except for some remote
> NetApp drives, which have been fixed in cygwin CVS). And while it is true
> that native Windows does not support symlinks, making NO_SYMLINK_HEAD a
> good idea for native builds; this is not the case for cygwin, and I did
> not seem to have any problems with removing it, either.
By the way, does ./configure script (make configure && ./configure)
detect this correctly?
BTW. symlink HEAD is considered obsolete.
--
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
^ permalink raw reply
* Re: git-format-patch little gripe
From: Sean @ 2006-11-25 15:30 UTC (permalink / raw)
To: Jeff King; +Cc: Luben Tuikov, git
In-Reply-To: <20061103185026.GA28566@coredump.intra.peff.net>
On Fri, 3 Nov 2006 13:50:26 -0500
Jeff King <peff@peff.net> wrote:
> For my own workflow, I don't want to have to pick the commit out of
> rev-list (or log) output. I want to find it and hit a button to say "OK,
> now mail this patch." So I put _all_ of my patches into an mbox, and
> then browse them with mutt. Sort of a poor man's patch browser, but then
> I'm ready to jump into mailing them immediately.
>
> I use the following script:
>
> #!/bin/sh
> root=${1:-origin}
> git-format-patch -s --stdout $root >.mbox
> mutt -f .mbox
> rm -f .mbox
If your mail setup support imap, the patches can be dumped directly into
it rather than having to go through an mbox. For instance you can have
something like this in your ~/.gitconfig:
[imap]
Host = imap.server.com
Folder = "Drafts"
User = uname
Pass = password
And then the above command line becomes:
git-format-patch -s --stdout $root | git-imap-send
To move all the patches into your imap drafts folder to be accessed
by whatever email client you use.
Sean
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox