* Re: [PATCH] gitk: Add "Refs" menu
From: Sven Verdoolaege @ 2005-10-12 7:31 UTC (permalink / raw)
To: Pavel Roskin; +Cc: Paul Mackerras, git
In-Reply-To: <1129080380.2427.21.camel@dv>
On Tue, Oct 11, 2005 at 09:26:20PM -0400, Pavel Roskin wrote:
> Browsing trees and opening files for a given commit would be great and
> helpful from developers migrating from CVS.
Something like this ?
From: Ingo Bormuth <ibormuth@efil.de>
To: git@vger.kernel.org
Cc: paulus@samba.org
Subject: [PATCH] Gitk tree view (correction)
Message-ID: <20050824223550.GA23693@kruemel>
skimo
^ permalink raw reply
* Re: [PATCH] Try URI quoting for embedded TAB and LF in pathnames
From: Paul Eggert @ 2005-10-12 6:51 UTC (permalink / raw)
To: Linus Torvalds
Cc: Junio C Hamano, Robert Fitzsimons, Alex Riesen, git, Kai Ruemmler
In-Reply-To: <Pine.LNX.4.64.0510111346220.14597@g5.osdl.org>
Linus Torvalds <torvalds@osdl.org> writes:
> you can read it as a UTF-8 stream, but then quote things at a byte
> level (ie if you quote one "character", you quote _all_ bytes in
> that character).
Yes, that's what I had in mind.
> And you quote if:
>
> - the UTF-8 _character_ is in the 0x80-0x9f control range
Yes. Or more generally, if it's any UTF-8 control character.
> - any _raw_byte_ is in the 0x80-0x9f range (it might not be UTF-8)
Why quote the raw bytes? Is this for terminal escapes on older xterm
(or xterm-like) implementations that don't understand UTF-8? If so,
I'm not sure I'd bother, as it would introduce a lot of annoying
quoting with perfectly reasonable UTF-8, and (if we assume the world
is moving to UTF-8) it addresses a problem that is going away.
> - any _raw_byte_ is 0xfe-0xff (illegal UTF-8 character)
> - misformed UTF-8 (non-shortest sequence, or just generally invalid
> sequences with missing or wrong high bits)
Yes, that makes sense.
> quite frankly, that's a pretty painful thing to write.
It's not trivially short, yes. But it shouldn't be that hard.
Also, I guess we don't have to write it, at least not at first. As
long as we specify something like the C quoted-string format mentioned
earlier, we can encode into that format using a naive algorithm (e.g.,
quote any non-ASCII byte or ASCII control character), and beautify the
encoding method later.
> The upside is that it's easy to decode: you can _unquote_ it just as
> a byte stream.
Yes, that's the idea.
Also, the interchange format is the most important thing. We have to
decode anything that is in the format, and we must encode into the
format. Encoding prettily is nice, but not necessary.
^ permalink raw reply
* Re: [RFC] Cleaning up die() error messages
From: Matthias Urlichs @ 2005-10-12 6:04 UTC (permalink / raw)
To: H. Peter Anvin; +Cc: git
In-Reply-To: <434C8095.4080201@zytor.com>
[-- Attachment #1: Type: text/plain, Size: 1009 bytes --]
Hi,
H. Peter Anvin:
> >I thought about doing something like that, but ...
> >>However, a much bigger problem is cleanup.
> >
> >... exactly.
>
> I thought about this, and probably the sanest way is to wrap malloc()
> with something that creates a linked list of allocations. If we abort,
> we can unwind the linked list and free all allocations.
>
There already is a malloc library that does this, plus it can call
cleanup for you -- there's more to cleaning up than freeing memory. :-/
Let's see if I can actually find it again.
On the other hand, I wonder if the overhead when managing data
structures like that really offsets the additional work we'd need to do
otherwise, which is simply checking a few more return values.
--
Matthias Urlichs | {M:U} IT Design @ m-u-it.de | smurf@smurf.noris.de
Disclaimer: The quote was selected randomly. Really. | http://smurf.noris.de
- -
BOFH excuse #381:
Robotic tape changer mistook operator's tie for a backup tape.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply
* [PATCH]: Use ARGS, not positional arguments
From: Pavel Roskin @ 2005-10-12 5:57 UTC (permalink / raw)
To: Petr Baudis, git
Some scripts need to be fixed to use ARGS properly.
Positional arguments are no longer preserved in cg-Xlib, so they may not
be used. cg-export uses standard option parsing now.
Signed-off-by: Pavel Roskin <proski@gnu.org>
diff --git a/cg-admin-lsobj b/cg-admin-lsobj
index 8899037..bf3413f 100755
--- a/cg-admin-lsobj
+++ b/cg-admin-lsobj
@@ -39,7 +39,7 @@ USAGE="cg-admin-lsobj [OBJECT_TYPE]"
. ${COGITO_LIB}cg-Xlib || exit 1
-target=$1
+target=${ARGS[0]}
subdir=$_git_objects
diff --git a/cg-branch-add b/cg-branch-add
index eb20598..c5462cf 100755
--- a/cg-branch-add
+++ b/cg-branch-add
@@ -63,8 +63,8 @@ USAGE="cg-branch-add BRANCH_NAME LOCATIO
. ${COGITO_LIB}cg-Xlib || exit 1
-name=$1
-location=$2
+name=${ARGS[0]}
+location=${ARGS[1]}
([ "$name" ] && [ "$location" ]) || usage
(echo $name | egrep -qv '[^a-zA-Z0-9_.@!:-]') || \
diff --git a/cg-branch-chg b/cg-branch-chg
index 6ac8d15..9c98f6b 100755
--- a/cg-branch-chg
+++ b/cg-branch-chg
@@ -9,8 +9,8 @@ USAGE="cg-branch-chg BRANCH_NAME NEW_LOC
. ${COGITO_LIB}cg-Xlib || exit 1
-name=$1
-location=$2
+name=${ARGS[0]}
+location=${ARGS[1]}
([ "$name" ] && [ "$location" ]) || usage
[ -s "$_git/branches/$name" ] || die "branch does not exist"
diff --git a/cg-export b/cg-export
index 594e225..ef9e7cc 100755
--- a/cg-export
+++ b/cg-export
@@ -15,17 +15,22 @@ _git_requires_root=1
. ${COGITO_LIB}cg-Xlib || exit 1
-if [ "$1" = "-r" ]; then
- shift
- # We do not resolve to tree id since git-tar-tree can utilize some commit
- # information.
- id="$(cg-object-id -c "$1" 2>/dev/null)" || id="$1"
- shift
-else
+id=
+while optparse; do
+ if optparse -r=; then
+ # We do not resolve to tree id since git-tar-tree can
+ # utilize some commit information.
+ id="$(cg-object-id -c "$OPTARG" 2>/dev/null)" || id="$OPTARG"
+ else
+ optfail
+ fi
+done
+
+if [ -z "$id" ]; then
id="$(cg-object-id -c)"
fi
-dest=$1
+dest=${ARGS[0]}
([ "$dest" ] && [ "$id" ]) || usage
diff --git a/cg-patch b/cg-patch
index 2aecd1a..153376e 100755
--- a/cg-patch
+++ b/cg-patch
@@ -70,7 +70,7 @@ redzone_border()
reverse=
-if [ "$1" = "-R" ]; then
+if [ "${ARGS[0]}" = "-R" ]; then
reverse=1
shift
fi
diff --git a/cg-reset b/cg-reset
index dbd69c6..38b7361 100755
--- a/cg-reset
+++ b/cg-reset
@@ -20,7 +20,7 @@ _git_requires_root=1
. ${COGITO_LIB}cg-Xlib || exit 1
deprecated_alias cg-reset cg-cancel
-[ "$1" ] && die "this command takes no parameters; use cg-restore to restore individual files"
+[ "${ARGS[0]}" ] && die "this command takes no parameters; use cg-restore to restore individual files"
if ! [ -s $_git/HEAD ]; then
rm -f $_git/HEAD
diff --git a/cg-seek b/cg-seek
index f07b90c..d2aeb0a 100755
--- a/cg-seek
+++ b/cg-seek
@@ -24,7 +24,7 @@ _git_requires_root=1
. ${COGITO_LIB}cg-Xlib || exit 1
-dstcommit=$1
+dstcommit=${ARGS[0]}
[ -s $_git/blocked ] && grep -vq '^seeked from ' $_git/blocked && die "action blocked: $(cat $_git/blocked)"
--
Regards,
Pavel Roskin
^ permalink raw reply related
* Re: [PATCH] git-fetch --tags: deal with tags with spaces in them.
From: Junio C Hamano @ 2005-10-12 5:29 UTC (permalink / raw)
To: git; +Cc: Martin Langhoff (CatalystIT)
In-Reply-To: <7vzmpgy4g4.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> writes:
> We cannot still do arbitrary reference names, but at least now
> we allow spaces in them. But I am not sure if this is a good
> change.
>
> Do we in general want to support references with [^-a-zA-Z0-9.]
> in them? Most notably spaces?
>
> Opinions?
Here is mine.
I do not personally think it is too much of a restriction if we
said we only allow tags using letters from [-a-zA-Z0-9.] (yes I
am trying to be controversial by not allowing even latin-1
names). Even without going that far, if we just said we do not
allow shell metacharacters in tagnames (i.e. assuming UTF-8
encoded pathnames, non-ascii part of unicode character space is
allowed), I suspect things will get much simpler to handle.
The troublesome tags Martin's repository had were autocreated
with cvsimport. That is something we could easily fix (I think
we already do certain tagname munging).
^ permalink raw reply
* Re: [PATCH] Add git-findtags
From: Junio C Hamano @ 2005-10-12 5:19 UTC (permalink / raw)
To: Martin Langhoff; +Cc: git
In-Reply-To: <1129087169926-git-send-email-martin@catalyst.net.nz>
Martin Langhoff <martin@catalyst.net.nz> writes:
> +my @tagfiles = `find $git_dir/refs/tags -follow -type f`; # haystack
Please do this with File::Find(), unless you have a compelling
reason not to. $git_dir could contain shell metacharacters
and/or whitespace.
> + # grab the first 2 lines (the whole tag could be large)
> + my $tagobj = `git-cat-file tag $tagid | head -n2 `;
Careful; $tagfile could be a lightweight tag, and you would want
to consider it a hit if ($tagid eq $target).
BTW, does `` in Perl behave well upon SIGPIPE (hehe, we now have
Merlyn on the list so I can ask these silly Perl questions ;-))?
> + if ($tagobj =~ m/^type commit$/m) { # only deal with commits
> +
> + if ($tagobj =~ m/^object $target$/m) { # match on the commit
> + print basename($tagfile) . "\n";
Please show "tags/bl/ah" when ".git/refs/tags/bl/ah" points at
the target, not just "ah". Alternatively, "bl/ah" may also be
acceptable, since this command is about tags.
> + } elsif ( $opt_t && # follow the commit
> + $tagobj =~ m/^object (\S+)$/m) { # and try to match trees
I am not sure how useful '-t' would be in practice. If it is, I
wonder if it would also be useful to look for a subtree match..
> +sub quickread {
> + my $file = shift;
> + local $/; undef $/; # slurp mode
Nit -- "local $/;" without "undef $/;" would do just fine.
BTW, wouldn't it be easier for this particular script, and more
useful in general, if something like what 'git-rev-parse' does
for commit objects when given "REV^0" is supported for tags?
I am uncertain the about syntax/notation, but just like "^0" is
a postfix operator for "peel the onion repeatedly until you get
a commit, or barf if you ended up with a non-commit", maybe if
we had "peel the onion repeatedly until you get a non-tag"
operator, let's call it '%', then you could say something like
this:
# This is pseudo-code -- it does not handle tagname with
# embedded $IFS letter very well.
# list local refs
git-rev-parse --symbolic --all |
# limit only to tags
sed -ne '/^refs\/tags\/p' |
while read tagname
do
if test $(git-rev-parse --verify "${tagname}%") = "$target"
then
echo "$tagname"
fi
done
^ permalink raw reply
* Re: [RFC] Cleaning up die() error messages
From: Junio C Hamano @ 2005-10-12 5:02 UTC (permalink / raw)
To: H. Peter Anvin; +Cc: git
In-Reply-To: <434C93C5.9040505@zytor.com>
"H. Peter Anvin" <hpa@zytor.com> writes:
> Not unless any of those linked structures can be reached from outside
> the git library.
OK. How about things like open file descriptors and mmap'ed
regions then? That is:
fd = open();
xmalloc(); /* may die now */
close(fd);
I think in the long run we would be better off if we properly
dealt with the case where (x)malloc returns NULL. Of course,
that would make libification a bigger task, so we do not have to
do it from day one.
^ permalink raw reply
* Re: [RFC] Cleaning up die() error messages
From: H. Peter Anvin @ 2005-10-12 4:40 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <7vd5mbqs2x.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano wrote:
> "H. Peter Anvin" <hpa@zytor.com> writes:
>
>>I thought about this, and probably the sanest way is to wrap malloc()
>>with something that creates a linked list of allocations. If we abort,
>>we can unwind the linked list and free all allocations.
>
> You can free() the allocated memory with something like that,
> but it is likely that the aborted function would have already
> created some linked structure out of those memory blocks, and
> cleaning up that you would need the real exception handling
> wouldn't you?
>
Not unless any of those linked structures can be reached from outside
the git library.
-hpa
^ permalink raw reply
* Re: [RFC] Cleaning up die() error messages
From: Junio C Hamano @ 2005-10-12 4:25 UTC (permalink / raw)
To: H. Peter Anvin; +Cc: git
In-Reply-To: <434C8095.4080201@zytor.com>
"H. Peter Anvin" <hpa@zytor.com> writes:
> I thought about this, and probably the sanest way is to wrap malloc()
> with something that creates a linked list of allocations. If we abort,
> we can unwind the linked list and free all allocations.
You can free() the allocated memory with something like that,
but it is likely that the aborted function would have already
created some linked structure out of those memory blocks, and
cleaning up that you would need the real exception handling
wouldn't you?
^ permalink raw reply
* Re: Strangely broken git repo
From: Junio C Hamano @ 2005-10-12 4:22 UTC (permalink / raw)
To: Nick Hengeveld; +Cc: Martin Langhoff (CatalystIT), Daniel Barkalow, git
In-Reply-To: <20051012032646.GA14819@reactrix.com>
Nick Hengeveld <nickh@reactrix.com> writes:
> Oops, thanks for catching that - I'll fix it.
That's OK. It turns out that fetch_alternates() function itself
is now called from the main just once; it used to be called
lazily and needed the call-once guard.
> I'd thought about chaining the alternates, but wasn't sure whether it's
> safe to consider all alternates in the chain equivalent.
Well, I decided we shouldn't, because the original repository
that has objects/info/alternates surely doesn't.
^ permalink raw reply
* Re: Strangely broken git repo
From: Nick Hengeveld @ 2005-10-12 3:26 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Martin Langhoff (CatalystIT), Daniel Barkalow, git
In-Reply-To: <7v4q7p927d.fsf@assigned-by-dhcp.cox.net>
On Mon, Oct 10, 2005 at 02:00:06AM -0700, Junio C Hamano wrote:
> The fetch_alternates() function was supposed to be call-once and
> we have a static variable got_alternates that becomes 1 when it
> runs for the first time. However, there are other 'return 0's
> introduced that does not set got_alternates to 1.
Oops, thanks for catching that - I'll fix it.
> I am wondering if the semantics has changed that now we chain
> the alternates? Initially, if we are cloning/fetching from
> repository A, which borrows from repository B (i.e. alternates
> we retrieve from A would name B), and if B in turn borrows from
> C, then we assumed that A's alternates would also name C, and
> that was the reason why fetch_alternates() was call-once
> function. I do not mind if we change it to chain the alternates
> file, but if that is the case we should move the got_alternates
> variable into "struct alt_base", and pass the struct, not just
> alt->base, to fetch_alternates(), like this (untested, of
> course):
I'd thought about chaining the alternates, but wasn't sure whether it's
safe to consider all alternates in the chain equivalent. I would want to
implement fetching the chain such that it could happen parallel to other
request and not block the pull. I think it would also be useful to track
the network performance of each alternate and prefer faster sources as
new requests are started.
--
For a successful technology, reality must take precedence over public
relations, for nature cannot be fooled.
^ permalink raw reply
* Re: [RFC] Cleaning up die() error messages
From: H. Peter Anvin @ 2005-10-12 3:18 UTC (permalink / raw)
To: Matthias Urlichs; +Cc: git
In-Reply-To: <pan.2005.10.12.01.20.17.917829@smurf.noris.de>
Matthias Urlichs wrote:
>
> I thought about doing something like that, but ...
>>However, a much bigger problem is cleanup.
>
> ... exactly.
>
I thought about this, and probably the sanest way is to wrap malloc()
with something that creates a linked list of allocations. If we abort,
we can unwind the linked list and free all allocations.
-hpa
^ permalink raw reply
* [PATCH] Add git-findtags
From: Martin Langhoff @ 2005-10-12 3:19 UTC (permalink / raw)
To: git; +Cc: Martin Langhoff
A short perl script that will walk the tag refs, tag objects, and even commit
objects in its quest to figure out whether the given SHA1 (for a commit or
tree) was ever tagged.
Usage: git-findtags.perl [ -t ] <commit-or-tree-sha1>
Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
---
Makefile | 3 ++
git-findtags.perl | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 72 insertions(+), 1 deletions(-)
create mode 100755 git-findtags.perl
applies-to: ef9b5c2cb61cf509adf2f5ef37fa1db517291f48
58597ae99b77a690a788d2f096cecc1b7ae809fd
diff --git a/Makefile b/Makefile
index 8697d52..a5d9cd4 100644
--- a/Makefile
+++ b/Makefile
@@ -93,7 +93,8 @@ SCRIPT_SH = \
SCRIPT_PERL = \
git-archimport.perl git-cvsimport.perl git-relink.perl \
- git-rename.perl git-shortlog.perl git-fmt-merge-msg.perl
+ git-rename.perl git-shortlog.perl git-fmt-merge-msg.perl \
+ git-findtags.perl
SCRIPT_PYTHON = \
git-merge-recursive.py
diff --git a/git-findtags.perl b/git-findtags.perl
new file mode 100755
index 0000000..40eb284
--- /dev/null
+++ b/git-findtags.perl
@@ -0,0 +1,70 @@
+#!/usr/bin/perl -w
+#
+# Copyright (c) 2005 Martin Langhoff
+#
+# Walk the tags and find if they match a commit
+# expects a SHA1 of a commit. Option -t enables
+# searching trees too.
+#
+
+use strict;
+use File::Basename;
+use Getopt::Std;
+
+my $git_dir = $ENV{GIT_DIR} || '.git';
+
+# options
+our $opt_t;
+getopts("t") || usage();
+
+my @tagfiles = `find $git_dir/refs/tags -follow -type f`; # haystack
+my $target = shift @ARGV; # needle
+
+unless ($target) {
+ usage();
+}
+
+
+foreach my $tagfile (@tagfiles) {
+ chomp $tagfile;
+ my $tagid = quickread($tagfile);
+ chomp $tagid;
+
+ # grab the first 2 lines (the whole tag could be large)
+ my $tagobj = `git-cat-file tag $tagid | head -n2 `;
+ if ($tagobj =~ m/^type commit$/m) { # only deal with commits
+
+ if ($tagobj =~ m/^object $target$/m) { # match on the commit
+ print basename($tagfile) . "\n";
+
+ } elsif ( $opt_t && # follow the commit
+ $tagobj =~ m/^object (\S+)$/m) { # and try to match trees
+ my $commitid = $1;
+ my $commitobj = `git-cat-file commit $commitid | head -n1`;
+ chomp $commitobj;
+ $commitobj =~ m/^tree (\S+)$/;
+ my $treeid = $1;
+ if ($target eq $treeid) {
+ print basename($tagfile) . "\n";
+ }
+ }
+ }
+}
+
+sub quickread {
+ my $file = shift;
+ local $/; undef $/; # slurp mode
+ open FILE, "<$file"
+ or die "Cannot open $file : $!";
+ my $content = <FILE>;
+ close FILE;
+ return $content;
+}
+
+sub usage {
+ print STDERR <<END;
+Usage: ${\basename $0} # find tags for a commit or tree
+ [ -t ] <commit-or-tree-sha1>
+END
+ exit(1);
+}
---
0.99.8.GIT
^ permalink raw reply related
* [PATCH] cvsimport: don't pass --cvs-direct if user options contradict us
From: Martin Langhoff @ 2005-10-12 3:18 UTC (permalink / raw)
To: git; +Cc: Martin Langhoff
Detecting if the user passed --no-cvs-direct and don't force the mode.
It allows us to support all the protocol that the standard cvs client
supports at the snail speed you should expect.
This only affects the rlog reading stage.
Signed-off-by: Martin Langhoff <martin@catalyst.net.nz>
---
git-cvsimport.perl | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
applies-to: c3f42ea5a9df4c1c520b0f32d4e3808d4f000ed7
35587b31ee78ae96a54b10107c5ea3ce21eaa6b1
diff --git a/git-cvsimport.perl b/git-cvsimport.perl
index f35c0d0..f7c3a51 100755
--- a/git-cvsimport.perl
+++ b/git-cvsimport.perl
@@ -487,7 +487,10 @@ unless($pid) {
my @opt;
@opt = split(/,/,$opt_p) if defined $opt_p;
unshift @opt, '-z', $opt_z if defined $opt_z;
- exec("cvsps",@opt,"-u","-A","--cvs-direct",'--root',$opt_d,$cvs_tree);
+ unless ($opt_p =~ m/--no-cvs-direct/) {
+ push @opt, '--cvs-direct';
+ }
+ exec("cvsps",@opt,"-u","-A",'--root',$opt_d,$cvs_tree);
die "Could not start cvsps: $!\n";
}
---
0.99.8.GIT
^ permalink raw reply related
* Re: [PATCH] Adapt tutorial to cygwin and add test case
From: Matthias Urlichs @ 2005-10-12 1:27 UTC (permalink / raw)
To: git
In-Reply-To: <7vu0fnsu6f.fsf@assigned-by-dhcp.cox.net>
Hi, Junio C Hamano wrote:
> The Kosher way would be
>
> tree=$(git-write-tree)
> commit=$(echo 'Initial commit' | git-commit-tree $tree)
> git-update-ref HEAD $(commit)
>
> but looks quite intimidating as a tutorial material.
... which is probably why there's a "git commit" command these days.
Those three commands may be The Works, but they also expose exactly what
git does behind the scenes, and thus explains reasonably well what you'd
need to think about if you want to do something that's not just a simple
commit.
--
Matthias Urlichs | {M:U} IT Design @ m-u-it.de | smurf@smurf.noris.de
Disclaimer: The quote was selected randomly. Really. | http://smurf.noris.de
- -
The Killer Ducks are coming!!!
^ permalink raw reply
* Re: [PATCH] gitk: Add "Refs" menu
From: Pavel Roskin @ 2005-10-12 1:26 UTC (permalink / raw)
To: Paul Mackerras; +Cc: git
In-Reply-To: <17227.44393.412591.267878@cargo.ozlabs.ibm.com>
Hi, Paul!
On Tue, 2005-10-11 at 22:17 +1000, Paul Mackerras wrote:
> Pavel Roskin writes:
>
> > This patch adds "Refs" menu to gitk. It makes all branches, tags and
> > other ref objects appear as menu items. Selecting one of the items
> > selects the corresponding line in the view.
>
> Sorry I haven't responded before - I have got way behind with my email
> due to a vacation and to concentrating on the merge of the ppc32 and
> ppc64 kernel sources. It will probably be a bit longer before I can
> get to look at this.
No problem. Thank you for letting me know.
I'm not a GUI designer and I'm not experienced in Tcl/Tk, so I'll
appreciate critical look at the patches.
I think that gitk should move away from being just a frontend to
git-rev-list. There is more information in the repository, such as
tags, branches, stgit patches etc. All this information needs to be
represented in some way, and using the menu was just the first approach.
Browsing trees and opening files for a given commit would be great and
helpful from developers migrating from CVS.
And making gitk cooperate with stgit would be a killer application not
just for gitk and stgit, but for git itself (i.e. it could be the reason
why git is chosen for development over e.g. Mercurial for new projects).
I don't want to distract you from PPC work, but your return to gitk
development would be very welcome :-)
--
Regards,
Pavel Roskin
^ permalink raw reply
* Re: [RFC] Cleaning up die() error messages
From: Matthias Urlichs @ 2005-10-12 1:20 UTC (permalink / raw)
To: git
In-Reply-To: <434C2590.3040107@zytor.com>
H. Peter Anvin wrote:
> The sane way to do this is probably to call an overridable git_die()
> function, which can be specified by the user to use longjmp(), to use
> exceptions, or do something else appropriately.
>
I thought about doing something like that, but ...
> However, a much bigger problem is cleanup.
>
... exactly.
--
Matthias Urlichs | {M:U} IT Design @ m-u-it.de | smurf@smurf.noris.de
Disclaimer: The quote was selected randomly. Really. | http://smurf.noris.de
- -
BOFH excuse #282:
High altitude condensation from U.S.A.F prototype aircraft has contaminated
the primary subnet mask. Turn off your computer for 9 days to avoid
damaging it.
^ permalink raw reply
* Make git config variable names case-insensitive
From: Linus Torvalds @ 2005-10-12 1:09 UTC (permalink / raw)
To: Junio C Hamano, Git Mailing List
They always were meant to be case-insensitive, but I had missed one
"tolower()", making that not true.
The actual _values_ aren't case-insensitive, of course, although some uses
of them may be (ie boolean parsing uses "strcasecmp()" to match against
the strings "true" and "false").
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
---
This should independent of the other patch - it should apply whether
you've taken the [user]name/email config thing or not. But it was
generated on top of that change.
diff --git a/config.c b/config.c
index cf80358..9b7c6f2 100644
--- a/config.c
+++ b/config.c
@@ -168,7 +168,7 @@ static int git_parse_file(config_fn_t fn
}
if (!isalpha(c))
break;
- var[baselen] = c;
+ var[baselen] = tolower(c);
if (get_value(fn, var, baselen+1) < 0)
break;
}
^ permalink raw reply related
* Use git config file for committer name and email info
From: Linus Torvalds @ 2005-10-12 0:54 UTC (permalink / raw)
To: Junio C Hamano, Git Mailing List
This starts using the "user.name" and "user.email" config variables if
they exist as the default name and email when committing. This means
that you don't have to use the GIT_COMMITTER_EMAIL environment variable
to override your email - you can just edit the config file instead.
The patch looks bigger than it is because it makes the default name and
email information non-static and renames it appropriately. And it moves
the common git environment variables into a new library file, so that
you can link against libgit.a and get the git environment without having
to link in zlib and libcrypt.
In short, most of it is renaming and moving, the real change core is
just a few new lines in "git_default_config()" that copies the user
config values to the new base.
It also changes "git-var -l" to list the config variables.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
---
With this, you can now have a .git/config file that has something like
this in it:
[user]
name = Linus Torvalds
email = torvalds@osdl.org
[core]
filemode = false
and it will do the obvious thing. The "user.name" and "user.email"
variables will be used by default for the name information, overriding any
system information from /etc/passwd etc.
NOTE! The GIT_{COMMITTER|AUTHOR}_NAME and GIT_{COMMITTER|AUTHOR}_EMAIL
environment variables continue to override any config file information.
Also, we should probably verify that the name/email is valid (ie doesn't
contain any of the characters "<>\n" that could cause invalid commit
objects).
The fact that "git-var -l" now also shows all config info can be useful.
For example, scripts can use it to pick up stuff from the config file, ie
we could make "git tag" get the default key from there by adding something
like
key=$(git-var -l | sed -n '/^user\.key=/ { s/user.key=//;p;q}')
to the script, which again allows us to have a convenient default value in
the config file without littering us up with more environment variables.
Hmm?
This hasn't gotten a ton of testing, but I did do a test-commit with this,
and it all seems to work.
---
Makefile | 2 +-
cache.h | 4 +++
commit-tree.c | 4 ++-
config.c | 10 ++++++++
environment.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ident.c | 30 +++++++++++------------
read-cache.c | 1 -
sha1_file.c | 59 ---------------------------------------------
var.c | 11 ++++++++
9 files changed, 118 insertions(+), 78 deletions(-)
diff --git a/Makefile b/Makefile
index 8697d52..ee3a752 100644
--- a/Makefile
+++ b/Makefile
@@ -158,7 +158,7 @@ LIB_OBJS = \
object.o pack-check.o patch-delta.o path.o pkt-line.o \
quote.o read-cache.o refs.o run-command.o \
server-info.o setup.o sha1_file.o sha1_name.o strbuf.o \
- tag.o tree.o usage.o config.o $(DIFF_OBJS)
+ tag.o tree.o usage.o config.o environment.o $(DIFF_OBJS)
LIBS = $(LIB_FILE)
LIBS += -lz
diff --git a/cache.h b/cache.h
index 41cc22c..1a7e047 100644
--- a/cache.h
+++ b/cache.h
@@ -382,4 +382,8 @@ extern int git_config(config_fn_t fn);
extern int git_config_int(const char *, const char *);
extern int git_config_bool(const char *, const char *);
+#define MAX_GITNAME (1000)
+extern char git_default_email[MAX_GITNAME];
+extern char git_default_name[MAX_GITNAME];
+
#endif /* CACHE_H */
diff --git a/commit-tree.c b/commit-tree.c
index b1ef0b5..030fb70 100644
--- a/commit-tree.c
+++ b/commit-tree.c
@@ -89,6 +89,9 @@ int main(int argc, char **argv)
char *buffer;
unsigned int size;
+ setup_ident();
+ git_config(git_default_config);
+
if (argc < 2 || get_sha1_hex(argv[1], tree_sha1) < 0)
usage(commit_tree_usage);
@@ -104,7 +107,6 @@ int main(int argc, char **argv)
}
if (!parents)
fprintf(stderr, "Committing initial tree %s\n", argv[1]);
- setup_ident();
init_buffer(&buffer, &size);
add_buffer(&buffer, &size, "tree %s\n", sha1_to_hex(tree_sha1));
diff --git a/config.c b/config.c
index 510456c..cf80358 100644
--- a/config.c
+++ b/config.c
@@ -207,6 +207,16 @@ int git_default_config(const char *var,
return 0;
}
+ if (!strcmp(var, "user.name")) {
+ strncpy(git_default_name, value, sizeof(git_default_name));
+ return 0;
+ }
+
+ if (!strcmp(var, "user.email")) {
+ strncpy(git_default_email, value, sizeof(git_default_email));
+ return 0;
+ }
+
/* Add other config variables here.. */
return 0;
}
diff --git a/environment.c b/environment.c
new file mode 100644
index 0000000..1dc7af5
--- /dev/null
+++ b/environment.c
@@ -0,0 +1,75 @@
+/*
+ * We put all the git config variables in this same object
+ * file, so that programs can link against the config parser
+ * without having to link against all the rest of git.
+ *
+ * In particular, no need to bring in libz etc unless needed,
+ * even if you might want to know where the git directory etc
+ * are.
+ */
+#include "cache.h"
+
+char git_default_email[MAX_GITNAME];
+char git_default_name[MAX_GITNAME];
+int trust_executable_bit = 1;
+
+static char *git_dir, *git_object_dir, *git_index_file, *git_refs_dir,
+ *git_graft_file;
+static void setup_git_env(void)
+{
+ git_dir = getenv(GIT_DIR_ENVIRONMENT);
+ if (!git_dir)
+ git_dir = DEFAULT_GIT_DIR_ENVIRONMENT;
+ git_object_dir = getenv(DB_ENVIRONMENT);
+ if (!git_object_dir) {
+ git_object_dir = xmalloc(strlen(git_dir) + 9);
+ sprintf(git_object_dir, "%s/objects", git_dir);
+ }
+ git_refs_dir = xmalloc(strlen(git_dir) + 6);
+ sprintf(git_refs_dir, "%s/refs", git_dir);
+ git_index_file = getenv(INDEX_ENVIRONMENT);
+ if (!git_index_file) {
+ git_index_file = xmalloc(strlen(git_dir) + 7);
+ sprintf(git_index_file, "%s/index", git_dir);
+ }
+ git_graft_file = getenv(GRAFT_ENVIRONMENT);
+ if (!git_graft_file)
+ git_graft_file = strdup(git_path("info/grafts"));
+}
+
+char *get_git_dir(void)
+{
+ if (!git_dir)
+ setup_git_env();
+ return git_dir;
+}
+
+char *get_object_directory(void)
+{
+ if (!git_object_dir)
+ setup_git_env();
+ return git_object_dir;
+}
+
+char *get_refs_directory(void)
+{
+ if (!git_refs_dir)
+ setup_git_env();
+ return git_refs_dir;
+}
+
+char *get_index_file(void)
+{
+ if (!git_index_file)
+ setup_git_env();
+ return git_index_file;
+}
+
+char *get_graft_file(void)
+{
+ if (!git_graft_file)
+ setup_git_env();
+ return git_graft_file;
+}
+
+
diff --git a/ident.c b/ident.c
index 562f5f1..7a9f567 100644
--- a/ident.c
+++ b/ident.c
@@ -11,9 +11,7 @@
#include <time.h>
#include <ctype.h>
-static char real_email[1000];
-static char real_name[1000];
-static char real_date[50];
+static char git_default_date[50];
static void copy_gecos(struct passwd *w, char *name, int sz)
{
@@ -58,22 +56,22 @@ int setup_ident(void)
die("You don't exist. Go away!");
/* Get the name ("gecos") */
- copy_gecos(pw, real_name, sizeof(real_name));
+ copy_gecos(pw, git_default_name, sizeof(git_default_name));
/* Make up a fake email address (name + '@' + hostname [+ '.' + domainname]) */
len = strlen(pw->pw_name);
- if (len > sizeof(real_email)/2)
+ if (len > sizeof(git_default_email)/2)
die("Your sysadmin must hate you!");
- memcpy(real_email, pw->pw_name, len);
- real_email[len++] = '@';
- gethostname(real_email + len, sizeof(real_email) - len);
- if (!strchr(real_email+len, '.')) {
- len = strlen(real_email);
- real_email[len++] = '.';
- getdomainname(real_email+len, sizeof(real_email)-len);
+ memcpy(git_default_email, pw->pw_name, len);
+ git_default_email[len++] = '@';
+ gethostname(git_default_email + len, sizeof(git_default_email) - len);
+ if (!strchr(git_default_email+len, '.')) {
+ len = strlen(git_default_email);
+ git_default_email[len++] = '.';
+ getdomainname(git_default_email+len, sizeof(git_default_email)-len);
}
/* And set the default date */
- datestamp(real_date, sizeof(real_date));
+ datestamp(git_default_date, sizeof(git_default_date));
return 0;
}
@@ -159,10 +157,10 @@ char *get_ident(const char *name, const
int i;
if (!name)
- name = real_name;
+ name = git_default_name;
if (!email)
- email = real_email;
- strcpy(date, real_date);
+ email = git_default_email;
+ strcpy(date, git_default_date);
if (date_str)
parse_date(date_str, date, sizeof(date));
diff --git a/read-cache.c b/read-cache.c
index c7f3b26..d2aebdd 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -5,7 +5,6 @@
*/
#include "cache.h"
-int trust_executable_bit = 1;
struct cache_entry **active_cache = NULL;
unsigned int active_nr = 0, active_alloc = 0, active_cache_changed = 0;
diff --git a/sha1_file.c b/sha1_file.c
index 6e3ea23..f059004 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -48,65 +48,6 @@ int get_sha1_hex(const char *hex, unsign
return 0;
}
-static char *git_dir, *git_object_dir, *git_index_file, *git_refs_dir,
- *git_graft_file;
-static void setup_git_env(void)
-{
- git_dir = getenv(GIT_DIR_ENVIRONMENT);
- if (!git_dir)
- git_dir = DEFAULT_GIT_DIR_ENVIRONMENT;
- git_object_dir = getenv(DB_ENVIRONMENT);
- if (!git_object_dir) {
- git_object_dir = xmalloc(strlen(git_dir) + 9);
- sprintf(git_object_dir, "%s/objects", git_dir);
- }
- git_refs_dir = xmalloc(strlen(git_dir) + 6);
- sprintf(git_refs_dir, "%s/refs", git_dir);
- git_index_file = getenv(INDEX_ENVIRONMENT);
- if (!git_index_file) {
- git_index_file = xmalloc(strlen(git_dir) + 7);
- sprintf(git_index_file, "%s/index", git_dir);
- }
- git_graft_file = getenv(GRAFT_ENVIRONMENT);
- if (!git_graft_file)
- git_graft_file = strdup(git_path("info/grafts"));
-}
-
-char *get_git_dir(void)
-{
- if (!git_dir)
- setup_git_env();
- return git_dir;
-}
-
-char *get_object_directory(void)
-{
- if (!git_object_dir)
- setup_git_env();
- return git_object_dir;
-}
-
-char *get_refs_directory(void)
-{
- if (!git_refs_dir)
- setup_git_env();
- return git_refs_dir;
-}
-
-char *get_index_file(void)
-{
- if (!git_index_file)
- setup_git_env();
- return git_index_file;
-}
-
-char *get_graft_file(void)
-{
- if (!git_graft_file)
- setup_git_env();
- return git_graft_file;
-}
-
int safe_create_leading_directories(char *path)
{
char *pos = path;
diff --git a/var.c b/var.c
index 3f13126..51cf86a 100644
--- a/var.c
+++ b/var.c
@@ -42,6 +42,15 @@ static const char *read_var(const char *
return val;
}
+static int show_config(const char *var, const char *value)
+{
+ if (value)
+ printf("%s=%s\n", var, value);
+ else
+ printf("%s\n", var);
+ return git_default_config(var, value);
+}
+
int main(int argc, char **argv)
{
const char *val;
@@ -52,9 +61,11 @@ int main(int argc, char **argv)
val = NULL;
if (strcmp(argv[1], "-l") == 0) {
+ git_config(show_config);
list_vars();
return 0;
}
+ git_config(git_default_config);
val = read_var(argv[1]);
if (!val)
usage(var_usage);
^ permalink raw reply related
* Re: Add ".git/config" file parser
From: Junio C Hamano @ 2005-10-12 0:25 UTC (permalink / raw)
To: Git Mailing List; +Cc: Linus Torvalds
In-Reply-To: <Pine.LNX.4.64.0510101415080.14597@g5.osdl.org>
This is a WIP to implement update-index that does not care the
filesystem mode change. When you have the following in
.git/config:
[core]
filemode = false
the following things happen:
* "git-update-index --refresh" does not consider the executable
bit change significant.
* "git-update-index" on an existing path takes executable bit
from the existing index entry, if the blob types are the
same.
* "git-diff-files" pretends the path on the filesystem has the
same executable bit as the existing index entry, if the blob
types are the same.
Yet to be done items are:
* Other programs from diff-* family that compares with the
filesystem needs to be covered.
* "git-update-index --chmod=+x" and "--chmod=-x".
* Refector code that takes the executable bit change from an
existing index entry.
WIP-not-worth-signing-off-yet-by: Junio C Hamano <junkio.cox.net>
---
cd /opt/packrat/playpen/public/in-place/git/git.junio/
git diff HEAD
diff --git a/diff-files.c b/diff-files.c
index 96d2c7f..014f74e 100644
--- a/diff-files.c
+++ b/diff-files.c
@@ -81,7 +81,7 @@ int main(int argc, const char **argv)
for (i = 0; i < entries; i++) {
struct stat st;
- unsigned int oldmode;
+ unsigned int oldmode, newmode;
struct cache_entry *ce = active_cache[i];
int changed;
@@ -111,7 +111,12 @@ int main(int argc, const char **argv)
if (!changed && !diff_options.find_copies_harder)
continue;
oldmode = ntohl(ce->ce_mode);
- show_modified(oldmode, DIFF_FILE_CANON_MODE(st.st_mode),
+
+ newmode = DIFF_FILE_CANON_MODE(st.st_mode);
+ if (!trust_executable_bit &&
+ S_ISREG(newmode) && ((newmode ^ oldmode) == 0111))
+ newmode = oldmode;
+ show_modified(oldmode, newmode,
ce->sha1, (changed ? null_sha1 : ce->sha1),
ce->name);
}
diff --git a/read-cache.c b/read-cache.c
index c7f3b26..4ed369a 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -36,8 +36,11 @@ int ce_match_stat(struct cache_entry *ce
switch (ntohl(ce->ce_mode) & S_IFMT) {
case S_IFREG:
changed |= !S_ISREG(st->st_mode) ? TYPE_CHANGED : 0;
- /* We consider only the owner x bit to be relevant for "mode changes" */
- if (0100 & (ntohl(ce->ce_mode) ^ st->st_mode))
+ /* We consider only the owner x bit to be relevant for
+ * "mode changes"
+ */
+ if (trust_executable_bit &&
+ (0100 & (ntohl(ce->ce_mode) ^ st->st_mode)))
changed |= MODE_CHANGED;
break;
case S_IFLNK:
@@ -393,7 +396,7 @@ int add_cache_entry(struct cache_entry *
int skip_df_check = option & ADD_CACHE_SKIP_DFCHECK;
pos = cache_name_pos(ce->name, ntohs(ce->ce_flags));
- /* existing match? Just replace it */
+ /* existing match? Just replace it. */
if (pos >= 0) {
active_cache_changed = 1;
active_cache[pos] = ce;
@@ -416,7 +419,8 @@ int add_cache_entry(struct cache_entry *
if (!ok_to_add)
return -1;
- if (!skip_df_check && check_file_directory_conflict(ce, pos, ok_to_replace)) {
+ if (!skip_df_check &&
+ check_file_directory_conflict(ce, pos, ok_to_replace)) {
if (!ok_to_replace)
return -1;
pos = cache_name_pos(ce->name, ntohs(ce->ce_flags));
diff --git a/update-index.c b/update-index.c
index 01b4088..fd3a882 100644
--- a/update-index.c
+++ b/update-index.c
@@ -67,13 +67,23 @@ static int add_file_to_cache(const char
return error("lstat(\"%s\"): %s", path,
strerror(errno));
}
+
namelen = strlen(path);
size = cache_entry_size(namelen);
ce = xmalloc(size);
memset(ce, 0, size);
memcpy(ce->name, path, namelen);
fill_stat_cache_info(ce, &st);
+
ce->ce_mode = create_ce_mode(st.st_mode);
+ if (!trust_executable_bit) {
+ /* If there is an existing entry, pick the mode bits
+ * from it.
+ */
+ int pos = cache_name_pos(path, namelen);
+ if (0 <= pos)
+ ce->ce_mode = active_cache[pos]->ce_mode;
+ }
ce->ce_flags = htons(namelen);
if (index_path(ce->sha1, path, &st, !info_only))
@@ -328,6 +338,8 @@ int main(int argc, const char **argv)
const char *prefix = setup_git_directory();
int prefix_length = prefix ? strlen(prefix) : 0;
+ git_config(git_default_config);
+
newfd = hold_index_file_for_update(&cache_file, get_index_file());
if (newfd < 0)
die("unable to create new cachefile");
^ permalink raw reply related
* [PATCH] cogito: Use %{?dist} in RPM release number
From: Chris Wright @ 2005-10-11 23:50 UTC (permalink / raw)
To: Petr Baudis; +Cc: git
Useful when tracking multiple distro branches. Somehow I never sent
you this small bit.
Signed-off-by: Chris Wright <chris@osdl.org>
---
cogito.spec.in | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
8711e755f38f7458abf5e040e079da534820dd85
diff --git a/cogito.spec.in b/cogito.spec.in
--- a/cogito.spec.in
+++ b/cogito.spec.in
@@ -1,6 +1,6 @@
Name: cogito
Version: @@VERSION@@
-Release: 1
+Release: 1%{?dist}
Summary: The Cogito Version Control System
License: GPL
Group: Development/Tools
@@ -38,6 +38,9 @@ rm -rf $RPM_BUILD_ROOT
%doc README COPYING Documentation/*
%changelog
+* Tue Oct 11 2005 Chris Wright <chrisw@osdl.org> 0.15.1-1
+- use %dist
+
* Fri Sep 16 2005 Chris Wright <chrisw@osdl.org> 0.14.1-2
- fix _libdir breakage on 64-bit, the irony...
^ permalink raw reply
* Re: [PATCH] cg-tag - add support for longer commit messages
From: Petr Baudis @ 2005-10-11 23:39 UTC (permalink / raw)
To: Martin Langhoff; +Cc: git
In-Reply-To: <11289987493327-git-send-email-martin@catalyst.net.nz>
Dear diary, on Tue, Oct 11, 2005 at 04:45:49AM CEST, I got a letter
where Martin Langhoff <martin@catalyst.net.nz> told me that...
> Added an -m switch that points to a filename which contains a (potentially
> long) tag message.
>
> Bugs: Could alternatively be implemented via STDIN.
Hmm. Well, the '-d' option is silly and that's really what should read
as '-m', to keep it the same as cg-commit. Actually, I'd like to have it
as similar as possible, so it would be ideal to have cg-tag do something
like
if got_argument '-e'; then
if tty -s; then
throw_together_some_CG:_stuff
$EDITOR
parse_the_CG:_stuff
else
cat >>logmsg
fi
fi
to keep it symmetric to cg-commit (except that it won't require the
message if you don't bother to pass it anything). Well, I guess the CG:
stuff parsing is lower priority (and would require some factoring out of
the common code from cg-commit), so I'll do the simple part soon
(today or on Thursday) if noone does it first. *hint* *hint* ;-)
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
VI has two modes: the one in which it beeps and the one in which
it doesn't.
^ permalink raw reply
* Re: [PATCH] Fix cg-admin-uncommit
From: Petr Baudis @ 2005-10-11 23:16 UTC (permalink / raw)
To: Paolo 'Blaisorblade' Giarrusso; +Cc: git
In-Reply-To: <20050930183545.15895.61691.stgit@zion.home.lan>
Dear diary, on Fri, Sep 30, 2005 at 08:35:46PM CEST, I got a letter
where Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it> told me that...
> Btw, why doesn't optparse consume all the cmd arguments via shift, making thus
> sure that $1 never works at all?
I did something hopefully equivalent, thanks for the idea (and for the
patch as well :-).
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
VI has two modes: the one in which it beeps and the one in which
it doesn't.
^ permalink raw reply
* Re: [PATCH] First cut of a Cygwin package creation target.
From: Junio C Hamano @ 2005-10-11 22:48 UTC (permalink / raw)
To: timo; +Cc: git
In-Reply-To: <23711.145.36.10.111.1129040793.squirrel@www.dspsrv.com>
"Tim O Callaghan" <timo@dspsrv.com> writes:
> applies-to: 2bab3caf63fc29f249c792289365abaf1cfa071b
> ba3be06048f361afc80baae30b00dd6e022386d0
> diff --git a/Makefile b/Makefile
> old mode 100644
> new mode 100755
Is the mode change relevant to cygwin port?
> index c31af7b..1a227ed
> --- a/Makefile
> +++ b/Makefile
> @@ -441,6 +441,26 @@ deb: dist
> dpkg-source -b $(GIT_TARNAME)
> cd $(GIT_TARNAME) && fakeroot debian/rules binary
>
> +unexport prefix
> +export prefix=/
> +export DESTDIR=/tmp/cygwin/usr
> +cygwinpackage: all
> ...
Are these environment-mucking supposed to be only effective
while you are running cygwinpackage target, or are you breaking
everybody else? I cannot offhand tell because your patch does
not apply for me to try it out, after your MUA munged it.
^ permalink raw reply
* Re: [PATCH Cogito] Fix README asciidoc formatting
From: Petr Baudis @ 2005-10-11 21:43 UTC (permalink / raw)
To: Jonas Fonseca; +Cc: git
In-Reply-To: <20051002105601.GB9934@diku.dk>
Dear diary, on Sun, Oct 02, 2005 at 12:56:01PM CEST, I got a letter
where Jonas Fonseca <fonseca@diku.dk> told me that...
> BTW, what about adding some notatation info for those boxes? It looks
> very creative for an introduction document.
What do you mean by "notation info"?
> commit ca52918a9a6e02e55d878d8f5e68672432940337
> tree 60d270e8b45beeee9361b13284ff2eefec746fd6
> parent 9356837de630644323c800e2accad2618d7393f9
> author Jonas Fonseca <fonseca@diku.dk> Sun, 02 Oct 2005 12:45:03 +0200
> committer Jonas Fonseca <fonseca@antimatter.(none)> Sun, 02 Oct 2005 12:45:03 +0200
>
> README | 5 +++++
> 1 files changed, 5 insertions(+), 0 deletions(-)
>
> diff --git a/README b/README
> --- a/README
> +++ b/README
> @@ -305,11 +305,13 @@ will `cg-clone` do?
>
> +--------+
> +--------+
> +
> First it creates an empty repository
>
> +--------+
> $ origin<
> +--------+
> +
> Then it creates an 'origin' head, and will copy all the history from the
> remote repository's 'master' head there. So this head exists to reflect
> the state of the remote repository. The important point is that it is
..snip..
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
VI has two modes: the one in which it beeps and the one in which
it doesn't.
^ 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