* Re: [PATCH] Don't segfault if the given SHA1 name is longer than 40 characters
From: Nguyen Thai Ngoc Duy @ 2006-10-19 4:54 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
In-Reply-To: <7vwt6xvt7q.fsf@assigned-by-dhcp.cox.net>
On 10/19/06, Junio C Hamano <junkio@cox.net> wrote:
> The patch is correct, but it needs a better explanation in the
> proposed commit log message than just "Don't segfault".
Well, maybe because I got a segfault when I accidentally pasted an
sha1 twice (blame my mouse). I hadn't looked closely enough to the
bug. Anyway, you got the bug and obviously have a better explanation
than mine. Please fix it with a better explanation. I'll be more
explanatory next time. Thank you :-)
> get_describe_name() can be fed a string foo-gXXX...XXX with a
> very looooooooong hexstring. It calls get_short_sha1() without
> checking if XXX...XXX part is longer than 40-bytes (in which
> case it cannot be a valid object name).
>
> get_sha1_1() has the same problem. Given a hexstring longer
> than 40-bytes, it calls the function with it because earlier
> ones such as get_sha1_hex() would reject the input.
--
Duy
^ permalink raw reply
* Re: [PATCH] Add revspec documentation for ':path', ':[0-3]:path' and git-describe
From: Junio C Hamano @ 2006-10-19 4:43 UTC (permalink / raw)
To: pclouds; +Cc: git
In-Reply-To: <20061019030455.GA10554@localhost>
> As I'm not very good at English, please correct any mistake I made
Thanks. I do not know about English, but I'd move things around
to group them better. Most talk about committish but the
colon-path are about trees and blobs.
diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt
index 2f1306c..412bafb 100644
--- a/Documentation/git-rev-parse.txt
+++ b/Documentation/git-rev-parse.txt
@@ -111,7 +111,9 @@ SPECIFYING REVISIONS
A revision parameter typically, but not necessarily, names a
commit object. They use what is called an 'extended SHA1'
-syntax.
+syntax. Here are various ways to spell object names. The
+ones listed near the end of this list are to name trees and
+blobs contained in a commit.
* The full SHA1 object name (40-byte hexadecimal string), or
a substring of such that is unique within the repository.
@@ -119,6 +121,9 @@ syntax.
name the same commit object if there are no other object in
your repository whose object name starts with dae86e.
+* An output from `git-describe`; i.e. a closest tag, followed by a
+ dash, a 'g', and an abbreviated object name.
+
* A symbolic ref name. E.g. 'master' typically means the commit
object referenced by $GIT_DIR/refs/heads/master. If you
happen to have both heads/master and tags/master, you can
@@ -156,6 +161,15 @@ syntax.
and dereference the tag recursively until a non-tag object is
found.
+* A suffix ':' followed by a path; this names the blob or tree
+ at the given path in the tree-ish object named by the part
+ before the colon.
+
+* A colon, optionally followed by a stage number (0 to 3) and a
+ colon, followed by a path; this names a blob object in the
+ index at the given path. Missing stage number (and the colon
+ that follows it) names an stage 0 entry.
+
Here is an illustration, by Jon Loeliger. Both node B and C are
a commit parents of commit node A. Parent commits are ordered
left-to-right.
^ permalink raw reply related
* Re: [PATCH] Don't segfault if the given SHA1 name is longer than 40 characters
From: Junio C Hamano @ 2006-10-19 4:13 UTC (permalink / raw)
To: pclouds; +Cc: git
In-Reply-To: <20061019013441.GB9379@localhost>
pclouds@gmail.com writes:
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> sha1_name.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/sha1_name.c b/sha1_name.c
> index 9b226e3..6ffee22 100644
> --- a/sha1_name.c
> +++ b/sha1_name.c
> @@ -157,7 +157,7 @@ static int get_short_sha1(const char *na
> char canonical[40];
> unsigned char res[20];
>
> - if (len < MINIMUM_ABBREV)
> + if (len < MINIMUM_ABBREV || len > 40)
> return -1;
> hashclr(res);
> memset(canonical, 'x', 40);
Thanks.
The patch is correct, but it needs a better explanation in the
proposed commit log message than just "Don't segfault".
get_describe_name() can be fed a string foo-gXXX...XXX with a
very looooooooong hexstring. It calls get_short_sha1() without
checking if XXX...XXX part is longer than 40-bytes (in which
case it cannot be a valid object name).
get_sha1_1() has the same problem. Given a hexstring longer
than 40-bytes, it calls the function with it because earlier
ones such as get_sha1_hex() would reject the input.
^ permalink raw reply
* Re: [ANNOUNCE] Example Cogito Addon - cogito-bundle
From: Junio C Hamano @ 2006-10-19 3:46 UTC (permalink / raw)
To: Linus Torvalds; +Cc: git
In-Reply-To: <Pine.LNX.4.64.0610181655430.3962@g5.osdl.org>
Linus Torvalds <torvalds@osdl.org> writes:
> Actually, I've hit an impasse.
>
> So there's _another_ way of fixing a thin pack: it's to expand the objects
> without a base into non-delta objects, and keeping the number of objects
> in the pack the same. But _again_, we don't actually know which ones to
> expand until it's too late.
pack-objects.c::write_one() makes sure that we write out base
immediately after delta if we haven't written out its base yet,
so I suspect if you buffer one delta you should be Ok, no?
^ permalink raw reply
* Re: VCS comparison table
From: Aaron Bentley @ 2006-10-19 3:10 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Jakub Narebski, Andreas Ericsson, bazaar-ng, git
In-Reply-To: <Pine.LNX.4.64.0610172014250.3962@g5.osdl.org>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Linus Torvalds wrote:
> For example, what happens is that:
> - you like the simple revision numbers
> - that in turn means that you can never allow a mainline-merge to be done
> by anybody else than the main maintainer
That's not true of bzr development. The "main maintainer" that runs the
bzr.dev is an email bot. It's not an integrator-- its work is purely
mechanical. It can't resolve merge conflicts.
Most of the merge work is done in integration branches run by the core
developers. Although Martin is our project leader, lays out ground
rules, and makes design decisions, he doesn't have to be involved in any
particular merge.
> The "main trunk matters" mentality (which has deep roots in CVS - don't
> get me wrong, I don't think you're the first one to do this) is
> fundamentally antithetical to truly distributed system, because it
> basically assumes that some maintainer is "more important" than others.
Linus, if you got hit by a bus, it would still be a shock, and it would
still take time for the Linux world to recover. Your insights and
talent, both technical and social, make you the most important kernel
developer. And it stays that way because you deserve it. Projects with
good leadership don't fork, or if they do, the fork withers and dies
pretty quickly.
It is fine to say all branches are equal from a technical perspective.
- From a social perspective, it's just not true.
The scale of Bazaar development is much smaller than the scale of kernel
development, so it doesn't make sense to maintain long-term divergent
branches like the mm tree. We do occasionally have long-lived feature
branches, though.
> That special maintainer is the maintainer whose merge-trunk is followed,
> and whose revision numbers don't change when they are merged back.
In bzr development, it's very rare for anyone's revision numbers to change.
> That may even be _true_ in many cases. But please do realize that it's a
> real issue, and that it has real impact - it does two things:
>
> - it impacts the technology and workflow directly itself: "pull" and
> "merge" are different: a central maintainer would tend to do a "merge",
> and one more in the outskirts would tend to do more of a "pull",
> expecting his work to then be merged back to the "trunk" at some later
> point)
AFAIK, everyone who maintains long-lived branches in bzr uses "merge".
> - it will result in _psychological_ damage, in the sense that there's
> always one group that is the "trunk" group, and while you can pass the
> baton around (like the perl people do), it's always clear who sits
> centrally.
As I mentioned earlier, there are four people who each run their own
integration branches and make decisions about what gets merged. No baton.
>
> Maybe this is fine. It's certainly how most projects tend to work.
>
> I'll just point out that one of my design goals for git was to make every
> single repository 100% equal. That means that there MUST NOT be a "trunk",
> or a special line of development. There is no "vendor branch".
I think you're implying that on a technical level, bzr doesn't support
this. But it does. Every published repository has unique identifiers
for every revision on its mainline, and it's exceedingly uncommon for
these to change. There are special procedures to maintain bzr.dev, but
there's nothing technically unique about it. People develop against
bzr.dev rather than my integration branch, because they have
non-technical reasons for wanting their changes to be merged into
bzr.dev, not my integration branch.
> It's
> something that a lot of people on the git lists understand now, but it
> took a while for it to sink in - people used to believe that the "first
> parent" of a merge was somehow special, and I had to point out several
> times on the git list that no, that's not how it works - because the merge
> might have been done by somebody _else_ than the person who you think of
> as being "on the trunk".
On an actively-developed bzr branch, the first parent *is* special:
- - it's a revision that you committed
- - the diff between a revision and its first parent is the same as the
diff that would be produced just before it was committed.
> So when I say that your "simple" revision numbers are totally broken and
> horrible, I say that not because I think a number like "1.45.3.17" is
> ugly, but because I think that the deeper _implications_ of using a number
> like that is ugly. It implies one of two things:
>
> - the numbers change all the time as things get merged both ways
>
> OR
>
> - people try to maintain a "trunk" mentality
I don't think your analysis holds together completely, because all
actively-maintained branches have very stable revnos that anyone can
refer to.
> In git, the fact that everybody is on an equal footing is something that I
> think is really good. For example, when I was away for effectively three
> weeks during August, all the git-level merging for the kernel was done by
> Greg KH.
>
> And realize that he didn't use "my tree". No baton was passed. I emailed
> with him (and some others) before-hand, so that everybody knew that I
> expected to be just pull from Greg when I came back, but it was _his_ tree
> that he merged in, and he just worked the same way I did.
>
> And when I did come back, I did a "pull" from his tree.
That sounds to me like a baton was passed. You asked Greg to behave
like you, and told everyone else to expect that, too. Passing the baton
was a social, not technical event, but it did happen. And there would
certainly be no difficulty doing exactly that (right down to running
"pull") in Bazaar land.
In fact, we are currently rotating release managers. The 0.10 and 0.11
releases were done by Robert, and the upcoming 0.12 is being managed by
John. Neither of them is the project leader. They threaten that they
want me to manage a release, too. We shall see...
Aaron
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFFNuyT0F+nu1YWqI0RAjxSAJ9YulgRMmIuy9RS1xrrYnKl9x2arQCaAr5/
u56sojZb6jhKl3fMQ/ZxLf4=
=EYC+
-----END PGP SIGNATURE-----
^ permalink raw reply
* [PATCH] Add revspec documentation for ':path', ':[0-3]:path' and git-describe
From: pclouds @ 2006-10-19 3:04 UTC (permalink / raw)
To: git, Junio C Hamano
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Documentation/git-rev-parse.txt | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
As I'm not very good at English, please correct any mistake I made
diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt
index 2f1306c..f8f4920 100644
--- a/Documentation/git-rev-parse.txt
+++ b/Documentation/git-rev-parse.txt
@@ -119,11 +119,17 @@ syntax.
name the same commit object if there are no other object in
your repository whose object name starts with dae86e.
+* The result of `git-describe`
+
* A symbolic ref name. E.g. 'master' typically means the commit
object referenced by $GIT_DIR/refs/heads/master. If you
happen to have both heads/master and tags/master, you can
explicitly say 'heads/master' to tell git which one you mean.
+* A colon at the beginning, followed by path name to specify
+ a file in index. If you want to specify a file in a stage,
+ use expression ':[0-3]:<path>' instead.
+
* A suffix '@' followed by a date specification enclosed in a brace
pair (e.g. '\{yesterday\}', '\{1 month 2 weeks 3 days 1 hour 1
second ago\}' or '\{1979-02-26 18:30:00\}') to specify the value
@@ -156,6 +162,9 @@ syntax.
and dereference the tag recursively until a non-tag object is
found.
+* A suffix ':' followed by path name to specify a specific file
+ in that commit/tag/tree.
+
Here is an illustration, by Jon Loeliger. Both node B and C are
a commit parents of commit node A. Parent commits are ordered
left-to-right.
--
1.4.3.rc2.g0503-dirty
^ permalink raw reply related
* Re: [ANNOUNCE] Example Cogito Addon - cogito-bundle
From: Nicolas Pitre @ 2006-10-19 3:01 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Junio C Hamano, Shawn Pearce, git
In-Reply-To: <Pine.LNX.4.64.0610181655430.3962@g5.osdl.org>
On Wed, 18 Oct 2006, Linus Torvalds wrote:
>
>
> On Wed, 18 Oct 2006, Nicolas Pitre wrote:
> >
> > If you use builtin-unpack-objects.c from next, you'll be able to
> > generate the pack index pretty easily as well, as all the needed info is
> > stored in the obj_list array. Just need to append objects remaining on
> > the delta_list array to the end of the pack, sort the obj_list by sha1
> > and write the index.
>
> Actually, I've hit an impasse.
>
> The index isn't the problem. The problem is actually writing the resultant
> pack-file itself in one go.
>
> The silly thing is, the pack-file contains the number of entries in the
> header. That's a silly problem, because the _natural_ way to turn a thin
> pack into a normal pack would be to just add the missing objects from the
> local store into the resulting pack. But we don't _know_ how many such
> missing objects there are, until we've gone through the whole source pack.
>
> So you can't easily do a streaming "write the result as you go along"
> version using that approach.
Hmmm.... unpack-objects receives a (possibly thin) pack over its stdin.
That part has to be streamed. But its output is currently always
written to multiple files as separate objects. So, while the input
comes from a stream, the output doesn't have to.
In that case, why not just write the input directly to a temporary file,
append the missing objects, seek back to adjust the object number, and
finally run a SHA1_Update() on the whole thing? This forces you to
write everything and then read everything back, but this should not be
too bad especially that the written data is likely to still be cached.
Once its final sha1sum is written then it just need to be moved with the
appropriate name.
> So there's _another_ way of fixing a thin pack: it's to expand the objects
> without a base into non-delta objects, and keeping the number of objects
> in the pack the same. But _again_, we don't actually know which ones to
> expand until it's too late.
>
> The end result? I can expand them all (I have a patch that does that). Or
> I could leave as deltas the ones I have already seen the base for in the
> pack-file (I don't have that yet, but that should be a SMOP). But I'm not
> very happy with even the latter choice, because it really potentially
> expands things that didn't _need_ expansion, they just got expanded
> because we hadn't seen the base object yet.
Most base objects, well all of them nowadays, are written before their
deltas. So in practice the only objects that will get expanded are the
deltas with missing base. Still it is unfortunate.
> So I'll happily send my patches to anybody who wants to try (I don't write
> the index file yet, but it should be easy to add), but I'm getting the
> feeling that "builtin-unpack-objects.c" is the wrong tool to use for this,
> because it's very much designed for streaming.
>
> It would probably be better to start from "index-pack.c" instead, which is
> already a multi-pass thing, and wouldn't have had any of the problems I
> hit.
But index-pack is totally incompatible with any streaming. It mmap()
the whole pack and happily perform random accesses. So you'd need to
write the entire thin pack to disk anyway before it could work on it.
This is not really better than the unpack-objects option. At least
unpack-objects is structured to perform work on the fly as data is
received.
> Gaah.
>
> > Pretty trivial indeed.
>
> So it's conceptually totally trivial to rewrite a pack-file as another
> pack-file, but at least so far, it's turned out to be less trivial in
> practice (or at least in a single pass, without holding everything in
> memory, which I definitely do _not_ want to do).
>
> So I'm leaving this for today, and perhaps coming back to it tomorrow with
> a fresh eye.
I'll have a look at your patches tomorrow as well. I have many ideas
brewing, including randering index-pack obsolete since actually
unpack-objects could do it all already (both tools have many concepts in
common).
Nicolas
^ permalink raw reply
* Re: VCS comparison table
From: Charles Duffy @ 2006-10-19 1:58 UTC (permalink / raw)
To: git; +Cc: bazaar-ng
In-Reply-To: <Pine.LNX.4.63.0610190144450.14200@wbgn013.biozentrum.uni-wuerzburg.de>
Johannes Schindelin wrote:
> So, the wonderful upside of plugins you described here are actually the
> reason I will never, _never_ use bzr with plugins.
>
I presume that for this reason you will also never, _never_ use a
non-mainline branch of git -- even if its actual code only touches UI
enhancements or something similarly non-core -- because third-party
branches have the ability, in theory, to make changes to the core of the
revision control system. And that you will never, _never_ use
third-party wrappers because they might play LD_PRELOAD tricks. Or run
any software with root privileges you haven't personally written. Or...
Sean's point that plugins are a comparatively minor win made inexpensive
on account of bzr's use of Python is reasonable (though we may choose to
differ on what level of value we attach to the utility). The claim that
an extensibility mechanism should be rejected wholesale on account of
being excessively powerful, on the other hand, is just silly.
(If you couldn't write a plugin that *didn't* touch the core, this would
be a different story. This is, however, very much not the case).
^ permalink raw reply
* [PATCH] Don't segfault if the given SHA1 name is longer than 40 characters
From: pclouds @ 2006-10-19 1:34 UTC (permalink / raw)
To: Junio C Hamano, git
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
sha1_name.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/sha1_name.c b/sha1_name.c
index 9b226e3..6ffee22 100644
--- a/sha1_name.c
+++ b/sha1_name.c
@@ -157,7 +157,7 @@ static int get_short_sha1(const char *na
char canonical[40];
unsigned char res[20];
- if (len < MINIMUM_ABBREV)
+ if (len < MINIMUM_ABBREV || len > 40)
return -1;
hashclr(res);
memset(canonical, 'x', 40);
--
1.4.3.rc2.g0503-dirty
^ permalink raw reply related
* [ANNOUNCE] Cogito-0.18.1
From: Petr Baudis @ 2006-10-19 0:53 UTC (permalink / raw)
To: git; +Cc: linux-kernel
Hello,
I've released cogito-0.18.1, bringing few minor new features and
random bugfixes to the cogito-0.18 version. Nothing groundshattering.
* cg-switch -c as a shortcut for cg-switch -r HEAD - use it to create a new
branch with less typing
* cg-patch -e to edit log message before autocommitting (useful esp. as
cg-patch -m -e)
* Support for cg-version --lib-dir, --share-dir
* cg-admin-rewritehist now defines a map() function for filters' use,
translating from old to new commit ids
* cg-commit -e now runs editor on /dev/tty even if input is not a tty
* Trivial documentation improvements
* Random details fixed
Happy hacking,
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
Of the 3 great composers Mozart tells us what it's like to be human,
Beethoven tells us what it's like to be Beethoven and Bach tells us
what it's like to be the universe. -- Douglas Adams
^ permalink raw reply
* Re: [ANNOUNCE] Example Cogito Addon - cogito-bundle
From: Linus Torvalds @ 2006-10-19 0:46 UTC (permalink / raw)
To: Johannes Schindelin
Cc: Nicolas Pitre, Junio C Hamano, Shawn Pearce, Git Mailing List
In-Reply-To: <Pine.LNX.4.63.0610190229270.14200@wbgn013.biozentrum.uni-wuerzburg.de>
On Thu, 19 Oct 2006, Johannes Schindelin wrote:
>
> You do not write this to stdout, right? Why not just come back and correct
> the number of objects? Of course, the SHA1 has to be calculated _after_
> that.
That's the issue. I wanted the pack-file thing to look as similar to the
old code as possible. And that means using the "sha1write()" interfaces,
which calculate the SHA1 checksum _as_ we write.
So yes, I wanted to do it all in one phase.
Anyway, if anybody is interested, here's a series of four patches that do
something that _almost_ works. I save away the SHA1's and the offsets so
that I could write an index too, but I didn't actually do that part.
But with this, I can rewrite a pack-file "in flight", and the end result
can then have "git index-pack" run on it, and used as a pack. It's just
that there are no deltas left because of some of the silly problems I
outlined (the code to write out deltas is actually there and just
uncommented - it works, but it leaves the end result with unsatisfied
deltas again).
Linus
---
commit 4efd9b0f44635b3075c9aad6d1cc8830e3abded3
Author: Linus Torvalds <torvalds@osdl.org>
Date: Wed Oct 18 17:22:04 2006 -0700
Fix up csum-file interfaces
Add "const" where appropriate
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff --git a/csum-file.c b/csum-file.c
index b7174c6..3237228 100644
--- a/csum-file.c
+++ b/csum-file.c
@@ -47,7 +47,7 @@ int sha1close(struct sha1file *f, unsign
return 0;
}
-int sha1write(struct sha1file *f, void *buf, unsigned int count)
+int sha1write(struct sha1file *f, const void *buf, unsigned int count)
{
while (count) {
unsigned offset = f->offset;
@@ -115,7 +115,7 @@ struct sha1file *sha1fd(int fd, const ch
return f;
}
-int sha1write_compressed(struct sha1file *f, void *in, unsigned int size)
+int sha1write_compressed(struct sha1file *f, const void *in, unsigned int size)
{
z_stream stream;
unsigned long maxsize;
@@ -127,7 +127,7 @@ int sha1write_compressed(struct sha1file
out = xmalloc(maxsize);
/* Compress it */
- stream.next_in = in;
+ stream.next_in = (void *) in;
stream.avail_in = size;
stream.next_out = out;
diff --git a/csum-file.h b/csum-file.h
index 3ad1a99..fee8589 100644
--- a/csum-file.h
+++ b/csum-file.h
@@ -13,7 +13,7 @@ struct sha1file {
extern struct sha1file *sha1fd(int fd, const char *name);
extern struct sha1file *sha1create(const char *fmt, ...) __attribute__((format (printf, 1, 2)));
extern int sha1close(struct sha1file *, unsigned char *, int);
-extern int sha1write(struct sha1file *, void *, unsigned int);
-extern int sha1write_compressed(struct sha1file *, void *, unsigned int);
+extern int sha1write(struct sha1file *, const void *, unsigned int);
+extern int sha1write_compressed(struct sha1file *, const void *, unsigned int);
#endif
\f
commit c2c8480b05a75d93f78a0ddd1cce18c6864738eb
Author: Linus Torvalds <torvalds@osdl.org>
Date: Wed Oct 18 17:20:53 2006 -0700
Make some of the pack-writing helper functions available
string_to_type() and encode_header() are useful in general.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index 96c069a..ea39bf3 100644
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c
@@ -220,6 +220,20 @@ static void *delta_against(void *buf, un
return delta_buf;
}
+enum object_type string_to_type(const char *type, const unsigned char *sha1)
+{
+ if (!strcmp(type, commit_type))
+ return OBJ_COMMIT;
+ if (!strcmp(type, tree_type))
+ return OBJ_TREE;
+ if (!strcmp(type, blob_type))
+ return OBJ_BLOB;
+ if (!strcmp(type, tag_type))
+ return OBJ_TAG;
+ die("strange object %s of unknown type %s",
+ sha1_to_hex(sha1), type);
+}
+
/*
* The per-object header is a pretty dense thing, which is
* - first byte: low four bits are "size", then three bits of "type",
@@ -227,7 +241,7 @@ static void *delta_against(void *buf, un
* - each byte afterwards: low seven bits are size continuation,
* with the high bit being "size continues"
*/
-static int encode_header(enum object_type type, unsigned long size, unsigned char *hdr)
+int encode_header(enum object_type type, unsigned long size, unsigned char *hdr)
{
int n = 1;
unsigned char c;
@@ -943,17 +957,7 @@ static void check_object(struct object_e
die("unable to get type of object %s",
sha1_to_hex(entry->sha1));
- if (!strcmp(type, commit_type)) {
- entry->type = OBJ_COMMIT;
- } else if (!strcmp(type, tree_type)) {
- entry->type = OBJ_TREE;
- } else if (!strcmp(type, blob_type)) {
- entry->type = OBJ_BLOB;
- } else if (!strcmp(type, tag_type)) {
- entry->type = OBJ_TAG;
- } else
- die("unable to pack object %s of type %s",
- sha1_to_hex(entry->sha1), type);
+ entry->type = string_to_type(type, entry->sha1);
}
static unsigned int check_delta_limit(struct object_entry *me, unsigned int n)
diff --git a/pack.h b/pack.h
index eb07b03..346a430 100644
--- a/pack.h
+++ b/pack.h
@@ -15,6 +15,9 @@ struct pack_header {
unsigned int hdr_entries;
};
+enum object_type string_to_type(const char *type, const unsigned char *sha1);
+int encode_header(enum object_type type, unsigned long size, unsigned char *hdr);
+
extern int verify_pack(struct packed_git *, int);
extern int check_reuse_pack_delta(struct packed_git *, unsigned long,
unsigned char *, unsigned long *,
\f
commit 94d620067b4a4179656c0ce347cb87be52a9d67f
Author: Linus Torvalds <torvalds@osdl.org>
Date: Wed Oct 18 15:44:40 2006 -0700
git-unpack-objects: pass in the original delta data when writing the object
This does nothing right now, but if we want to instead of loose objects
write a new "verified packfile" with an index, this lets us do that instead.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff --git a/builtin-unpack-objects.c b/builtin-unpack-objects.c
index 4f96bca..bbb6e21 100644
--- a/builtin-unpack-objects.c
+++ b/builtin-unpack-objects.c
@@ -109,7 +109,8 @@ static void add_delta_to_list(unsigned c
static void added_object(unsigned char *sha1, const char *type, void *data, unsigned long size);
-static void write_object(void *buf, unsigned long size, const char *type)
+static void write_object(void *buf, unsigned long size, const char *type,
+ unsigned char *base, void *delta, unsigned long delta_size)
{
unsigned char sha1[20];
if (write_sha1_file(buf, size, type, sha1) < 0)
@@ -117,7 +118,7 @@ static void write_object(void *buf, unsi
added_object(sha1, type, buf, size);
}
-static void resolve_delta(const char *type,
+static void resolve_delta(const char *type, unsigned char *base_sha1,
void *base, unsigned long base_size,
void *delta, unsigned long delta_size)
{
@@ -129,8 +130,8 @@ static void resolve_delta(const char *ty
&result_size);
if (!result)
die("failed to apply delta");
+ write_object(result, result_size, type, base_sha1, delta, delta_size);
free(delta);
- write_object(result, result_size, type);
free(result);
}
@@ -143,7 +144,7 @@ static void added_object(unsigned char *
if (!hashcmp(info->base_sha1, sha1)) {
*p = info->next;
p = &delta_list;
- resolve_delta(type, data, size, info->delta, info->size);
+ resolve_delta(type, sha1, data, size, info->delta, info->size);
free(info);
continue;
}
@@ -164,7 +165,7 @@ static void unpack_non_delta_entry(enum
default: die("bad type %d", kind);
}
if (!dry_run && buf)
- write_object(buf, size, type);
+ write_object(buf, size, type, NULL, NULL, 0);
free(buf);
}
@@ -197,7 +198,7 @@ static void unpack_delta_entry(unsigned
has_errors = 1;
return;
}
- resolve_delta(type, base, base_size, delta_data, delta_size);
+ resolve_delta(type, base_sha1, base, base_size, delta_data, delta_size);
free(base);
}
diff --git a/date.c b/date.c
index 1825922..0b06994 100644
--- a/date.c
+++ b/date.c
@@ -657,6 +657,7 @@ static const struct typelen {
{ "hours", 60*60 },
{ "days", 24*60*60 },
{ "weeks", 7*24*60*60 },
+ { "fortnights", 2*7*24*60*60 },
{ NULL }
};
\f
commit 636210e7fcceb7297ccf0fc54291bb1c8356f0d3
Author: Linus Torvalds <torvalds@osdl.org>
Date: Wed Oct 18 17:23:06 2006 -0700
Make "unpack-objects" able to write a single pack-file instead
This is idiotic. It writes everything undeltified, which is
horrid. I need a brain.
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff --git a/builtin-unpack-objects.c b/builtin-unpack-objects.c
index bbb6e21..f139308 100644
--- a/builtin-unpack-objects.c
+++ b/builtin-unpack-objects.c
@@ -7,11 +7,12 @@ #include "blob.h"
#include "commit.h"
#include "tag.h"
#include "tree.h"
+#include "csum-file.h"
#include <sys/time.h>
static int dry_run, quiet, recover, has_errors;
-static const char unpack_usage[] = "git-unpack-objects [-n] [-q] [-r] < pack-file";
+static const char unpack_usage[] = "git-unpack-objects [-n] [-q] [-r] [--repack=pack-name] < pack-file";
/* We always read in 4kB chunks. */
static unsigned char buffer[4096];
@@ -87,6 +88,56 @@ static void *get_data(unsigned long size
return buf;
}
+static struct sha1file *pack_file;
+static unsigned long pack_file_offset;
+
+struct index_entry {
+ unsigned long offset;
+ unsigned char sha1[20];
+};
+
+static unsigned int index_nr, index_alloc;
+static struct index_entry **index_array;
+
+static void add_pack_index(unsigned char *sha1)
+{
+ struct index_entry *entry;
+ int nr = index_nr;
+ if (nr >= index_alloc) {
+ index_alloc = (index_alloc + 64) * 3 / 2;
+ index_array = xrealloc(index_array, index_alloc * sizeof(*index_array));
+ }
+ entry = xmalloc(sizeof(*entry));
+ entry->offset = pack_file_offset;
+ hashcpy(entry->sha1, sha1);
+ index_array[nr++] = entry;
+}
+
+static void write_pack_delta(const unsigned char *base, const void *delta, unsigned long delta_size)
+{
+ unsigned char header[10];
+ unsigned hdrlen, datalen;
+
+ hdrlen = encode_header(OBJ_DELTA, delta_size, header);
+ sha1write(pack_file, header, hdrlen);
+ sha1write(pack_file, base, 20);
+ datalen = sha1write_compressed(pack_file, delta, delta_size);
+
+ pack_file_offset += hdrlen + 20 + datalen;
+}
+
+static void write_pack_object(const char *type, const unsigned char *sha1, const void *buf, unsigned long size)
+{
+ unsigned char header[10];
+ unsigned hdrlen, datalen;
+
+ hdrlen = encode_header(string_to_type(type, sha1), size, header);
+ sha1write(pack_file, header, hdrlen);
+ datalen = sha1write_compressed(pack_file, buf, size);
+
+ pack_file_offset += hdrlen + datalen;
+}
+
struct delta_info {
unsigned char base_sha1[20];
unsigned long size;
@@ -113,7 +164,16 @@ static void write_object(void *buf, unsi
unsigned char *base, void *delta, unsigned long delta_size)
{
unsigned char sha1[20];
- if (write_sha1_file(buf, size, type, sha1) < 0)
+
+ if (pack_file) {
+ if (hash_sha1_file(buf, size, type, sha1) < 0)
+ die("failed to compute object hash");
+ add_pack_index(sha1);
+ if (0 && base)
+ write_pack_delta(base, delta, delta_size);
+ else
+ write_pack_object(type, sha1, buf, size);
+ } else if (write_sha1_file(buf, size, type, sha1) < 0)
die("failed to write object");
added_object(sha1, type, buf, size);
}
@@ -254,7 +314,7 @@ static void unpack_one(unsigned nr, unsi
}
}
-static void unpack_all(void)
+static void unpack_all(const char *repack)
{
int i;
struct pack_header *hdr = fill(sizeof(struct pack_header));
@@ -266,17 +326,32 @@ static void unpack_all(void)
die("unknown pack file version %d", ntohl(hdr->hdr_version));
fprintf(stderr, "Unpacking %d objects\n", nr_objects);
+ if (repack) {
+ struct pack_header newhdr;
+ newhdr.hdr_signature = htonl(PACK_SIGNATURE);
+ newhdr.hdr_version = htonl(PACK_VERSION);
+ newhdr.hdr_entries = htonl(nr_objects);
+
+ pack_file = sha1create("%s.pack", repack);
+ sha1write(pack_file, &newhdr, sizeof(newhdr));
+ pack_file_offset = sizeof(newhdr);
+ }
+
+
use(sizeof(struct pack_header));
for (i = 0; i < nr_objects; i++)
unpack_one(i+1, nr_objects);
if (delta_list)
die("unresolved deltas left after unpacking");
+ if (repack)
+ sha1close(pack_file, NULL, 1);
}
int cmd_unpack_objects(int argc, const char **argv, const char *prefix)
{
int i;
unsigned char sha1[20];
+ const char *repack = NULL;
git_config(git_default_config);
@@ -298,6 +373,10 @@ int cmd_unpack_objects(int argc, const c
recover = 1;
continue;
}
+ if (!strncmp(arg, "--repack=", 9)) {
+ repack = arg + 9;
+ continue;
+ }
usage(unpack_usage);
}
@@ -305,7 +384,7 @@ int cmd_unpack_objects(int argc, const c
usage(unpack_usage);
}
SHA1_Init(&ctx);
- unpack_all();
+ unpack_all(repack);
SHA1_Update(&ctx, buffer, offset);
SHA1_Final(sha1, &ctx);
if (hashcmp(fill(20), sha1))
^ permalink raw reply related
* Re: VCS comparison table
From: Johannes Schindelin @ 2006-10-19 0:33 UTC (permalink / raw)
To: Petr Baudis; +Cc: Shawn Pearce, git
In-Reply-To: <20061018235415.GA20017@pasky.or.cz>
Hi,
On Thu, 19 Oct 2006, Petr Baudis wrote:
> Dear diary, on Thu, Oct 19, 2006 at 01:38:45AM CEST, I got a letter
> where Johannes Schindelin <Johannes.Schindelin@gmx.de> said that...
> > On Wed, 18 Oct 2006, Shawn Pearce wrote:
> >
> > > Today Git doesn't run natively on Windows.
> >
> > As I mentioned some time ago, I started a branch on MinGW. It works quite
> > well for the moment, but it lacks fork() emulation, and glob() emulation.
> > And I lack the time to continue working on it.
>
> care to publish it somewhere, e.g. on repo.or.cz?
It is way to dirty for that. I would only dare give it somebody in return
for the promise to clean everything up.
BTW I completely forgot that in the absence of poll() from MinGW, all the
networking code is actually just wrapped into "return -1;" functions.
> (P.S., have fun in Prague! Too bad I won't be around over the weekend.
> :-( )
Pity. You seem to have good connections...
Ciao,
Dscho
^ permalink raw reply
* Re: [ANNOUNCE] Example Cogito Addon - cogito-bundle
From: Johannes Schindelin @ 2006-10-19 0:31 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Nicolas Pitre, Junio C Hamano, Shawn Pearce, git
In-Reply-To: <Pine.LNX.4.64.0610181655430.3962@g5.osdl.org>
Hi,
On Wed, 18 Oct 2006, Linus Torvalds wrote:
> The silly thing is, the pack-file contains the number of entries in the
> header.
You do not write this to stdout, right? Why not just come back and correct
the number of objects? Of course, the SHA1 has to be calculated _after_
that.
Ciao,
Dscho
^ permalink raw reply
* Re: [ANNOUNCE] Example Cogito Addon - cogito-bundle
From: Linus Torvalds @ 2006-10-19 0:15 UTC (permalink / raw)
To: Nicolas Pitre; +Cc: Junio C Hamano, Shawn Pearce, git
In-Reply-To: <Pine.LNX.4.64.0610181655430.3962@g5.osdl.org>
On Wed, 18 Oct 2006, Linus Torvalds wrote:
>
> So I'll happily send my patches to anybody who wants to try (I don't write
> the index file yet, but it should be easy to add), but I'm getting the
> feeling that "builtin-unpack-objects.c" is the wrong tool to use for this,
> because it's very much designed for streaming.
A potentially even simpler way would probably be to literally just use
"git-pack-objects" directly, and just have a very special mode that allows
mapping the thin pack as if it was a real pack (ie basically
pre-populating a fake pack entry, where the fake part comes from adding
the missing objects by hand to the mapping).
So many ways to do it, so little real motivation ;)
Linus
^ permalink raw reply
* Re: [ANNOUNCE] Example Cogito Addon - cogito-bundle
From: Linus Torvalds @ 2006-10-19 0:07 UTC (permalink / raw)
To: Nicolas Pitre; +Cc: Junio C Hamano, Shawn Pearce, git
In-Reply-To: <Pine.LNX.4.64.0610181910440.1971@xanadu.home>
On Wed, 18 Oct 2006, Nicolas Pitre wrote:
>
> If you use builtin-unpack-objects.c from next, you'll be able to
> generate the pack index pretty easily as well, as all the needed info is
> stored in the obj_list array. Just need to append objects remaining on
> the delta_list array to the end of the pack, sort the obj_list by sha1
> and write the index.
Actually, I've hit an impasse.
The index isn't the problem. The problem is actually writing the resultant
pack-file itself in one go.
The silly thing is, the pack-file contains the number of entries in the
header. That's a silly problem, because the _natural_ way to turn a thin
pack into a normal pack would be to just add the missing objects from the
local store into the resulting pack. But we don't _know_ how many such
missing objects there are, until we've gone through the whole source pack.
So you can't easily do a streaming "write the result as you go along"
version using that approach.
So there's _another_ way of fixing a thin pack: it's to expand the objects
without a base into non-delta objects, and keeping the number of objects
in the pack the same. But _again_, we don't actually know which ones to
expand until it's too late.
The end result? I can expand them all (I have a patch that does that). Or
I could leave as deltas the ones I have already seen the base for in the
pack-file (I don't have that yet, but that should be a SMOP). But I'm not
very happy with even the latter choice, because it really potentially
expands things that didn't _need_ expansion, they just got expanded
because we hadn't seen the base object yet.
So I'll happily send my patches to anybody who wants to try (I don't write
the index file yet, but it should be easy to add), but I'm getting the
feeling that "builtin-unpack-objects.c" is the wrong tool to use for this,
because it's very much designed for streaming.
It would probably be better to start from "index-pack.c" instead, which is
already a multi-pass thing, and wouldn't have had any of the problems I
hit.
Gaah.
> Pretty trivial indeed.
So it's conceptually totally trivial to rewrite a pack-file as another
pack-file, but at least so far, it's turned out to be less trivial in
practice (or at least in a single pass, without holding everything in
memory, which I definitely do _not_ want to do).
So I'm leaving this for today, and perhaps coming back to it tomorrow with
a fresh eye.
Linus
^ permalink raw reply
* Re: VCS comparison table
From: Petr Baudis @ 2006-10-18 23:54 UTC (permalink / raw)
To: Johannes Schindelin; +Cc: Shawn Pearce, git
In-Reply-To: <Pine.LNX.4.63.0610190134040.14200@wbgn013.biozentrum.uni-wuerzburg.de>
Hi,
Dear diary, on Thu, Oct 19, 2006 at 01:38:45AM CEST, I got a letter
where Johannes Schindelin <Johannes.Schindelin@gmx.de> said that...
> On Wed, 18 Oct 2006, Shawn Pearce wrote:
>
> > Today Git doesn't run natively on Windows.
>
> As I mentioned some time ago, I started a branch on MinGW. It works quite
> well for the moment, but it lacks fork() emulation, and glob() emulation.
> And I lack the time to continue working on it.
care to publish it somewhere, e.g. on repo.or.cz?
(P.S., have fun in Prague! Too bad I won't be around over the weekend.
:-( )
Thanks,
--
Petr "Pasky" Baudis
Stuff: http://pasky.or.cz/
#!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
$/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)
^ permalink raw reply
* [ANNOUNCE] GIT 1.4.3
From: Junio C Hamano @ 2006-10-18 23:53 UTC (permalink / raw)
To: git; +Cc: linux-kernel
The latest feature release GIT 1.4.3 is available at the usual
places:
http://www.kernel.org/pub/software/scm/git/
git-1.4.3.tar.{gz,bz2} (tarball)
git-htmldocs-1.4.3.tar.{gz,bz2} (preformatted docs)
git-manpages-1.4.3.tar.{gz,bz2} (preformatted docs)
RPMS/$arch/git-*-1.4.3-1.$arch.rpm (RPM)
Please holler if i386 RPMs are broken, since they are not cut on
the machine I am used to use (I ended up burning half a day
installing and futzing with FC5 on my older laptop resurrected
from the boneyard).
User visible changes, other than bugfixes, since v1.4.2.4 are:
- upload-tar is deprecated but not removed; we now have
upload-archive --format=tar and --format=zip instead.
- ftp:// protocol is supported the same way as http:// and
https://
- git-diff paginates its output to the tty by default. If this
irritates you, using LESS=RF might help.
- git-cherry-pick does not leave often useless "cherry-picked
from" message.
- git-merge-recursive was replaced by a rewritten implemention
in C. The original Python implementation is available as
"recursive-old" strategy for now, but hopefully we can remove
it in the next cycle.
- git-daemon can do name based virtual hosting.
- git-daemon can serve tar and zip snapshots.
- many gitweb tweaks and cleanups.
- git-apply --reverse, --reject.
- git-diff --color highlights whitespace errors.
- git-diff --stat can be taught to use non-default widths.
- git-status can use colors.
- many more commands are built-in.
----------------------------------------------------------------
.gitignore | 10 +-
Documentation/Makefile | 4 +-
Documentation/asciidoc.conf | 1 +
Documentation/config.txt | 34 +
Documentation/core-tutorial.txt | 2 +-
Documentation/cvs-migration.txt | 2 +-
Documentation/diff-options.txt | 10 +-
Documentation/git-apply.txt | 69 +-
.../{git-tar-tree.txt => git-archive.txt} | 93 +-
Documentation/git-blame.txt | 29 +-
Documentation/git-cherry-pick.txt | 23 +-
Documentation/git-daemon.txt | 135 +-
Documentation/git-grep.txt | 15 +-
Documentation/git-http-push.txt | 2 +-
Documentation/git-init-db.txt | 4 +
Documentation/git-ls-remote.txt | 18 +-
Documentation/git-pack-objects.txt | 26 +-
Documentation/git-receive-pack.txt | 2 +
Documentation/git-repack.txt | 13 +-
Documentation/git-repo-config.txt | 3 +-
Documentation/git-rev-list.txt | 428 ++-
Documentation/git-rev-parse.txt | 2 +-
Documentation/git-send-pack.txt | 2 +-
Documentation/git-shortlog.txt | 17 +-
Documentation/git-svn.txt | 399 ++-
Documentation/git-tar-tree.txt | 3 +
Documentation/git-unpack-objects.txt | 8 +-
Documentation/git-update-index.txt | 4 +-
.../{git-upload-tar.txt => git-upload-archive.txt} | 24 +-
Documentation/git.txt | 37 +-
Documentation/gitk.txt | 151 +-
Documentation/glossary.txt | 4 +-
Documentation/hooks.txt | 56 +-
Documentation/technical/racy-git.txt | 193 +
Documentation/tutorial-2.txt | 2 +-
GIT-VERSION-GEN | 2 +-
INSTALL | 15 +-
Makefile | 297 +-
builtin-tar-tree.c => archive-tar.c | 229 +-
archive-zip.c | 333 ++
archive.h | 47 +
blame.c | 19 +-
builtin-apply.c | 708 +++-
builtin-archive.c | 263 ++
builtin-cat-file.c | 40 +-
checkout-index.c => builtin-checkout-index.c | 29 +-
builtin-commit-tree.c | 2 +-
builtin-count.c => builtin-count-objects.c | 2 +-
builtin-diff-files.c | 7 -
builtin-diff-stages.c | 2 +-
builtin-diff.c | 16 +-
builtin-fmt-merge-msg.c | 39 +-
builtin-grep.c | 650 +---
builtin-init-db.c | 1 +
builtin-log.c | 7 +-
builtin-ls-files.c | 27 +-
builtin-ls-tree.c | 6 +-
builtin-mailinfo.c | 17 +-
builtin-mv.c | 12 +-
name-rev.c => builtin-name-rev.c | 8 +-
pack-objects.c => builtin-pack-objects.c | 439 ++-
builtin-prune-packed.c | 2 +-
builtin-prune.c | 4 +-
builtin-push.c | 32 +-
builtin-read-tree.c | 865 +----
builtin-repo-config.c | 34 +-
builtin-rev-list.c | 171 +-
builtin-rev-parse.c | 10 +-
builtin-rm.c | 2 +-
builtin-runstatus.c | 36 +
builtin-show-branch.c | 18 +-
symbolic-ref.c => builtin-symbolic-ref.c | 8 +-
builtin-tar-tree.c | 439 +--
unpack-objects.c => builtin-unpack-objects.c | 78 +-
builtin-update-index.c | 18 +-
builtin-update-ref.c | 2 +-
builtin-upload-archive.c | 175 +
builtin-upload-tar.c | 74 -
verify-pack.c => builtin-verify-pack.c | 15 +-
builtin-write-tree.c | 4 +-
builtin.h | 86 +-
cache-tree.c | 14 +-
cache.h | 68 +-
check-racy.c | 28 +
color.c | 176 +
color.h | 12 +
combine-diff.c | 41 +-
commit.c | 51 +-
commit.h | 2 +-
compat/inet_pton.c | 220 +
config.c | 18 +-
config.mak.in | 18 +
configure.ac | 561 ++-
connect.c | 50 +-
contrib/completion/git-completion.bash | 324 ++
contrib/emacs/git.el | 4 +-
contrib/emacs/vc-git.el | 6 +-
contrib/gitview/gitview.txt | 56 +-
contrib/vim/README | 8 +
contrib/vim/syntax/gitcommit.vim | 18 +
convert-objects.c | 8 +-
csum-file.c | 6 +-
daemon.c | 431 ++-
date.c | 132 +-
describe.c | 14 +-
diff-delta.c | 4 +-
diff-lib.c | 32 +-
diff.c | 666 ++-
diff.h | 15 +-
diffcore-break.c | 2 +-
diffcore-rename.c | 2 +-
dir.c | 48 +-
dir.h | 1 +
dump-cache-tree.c | 2 +-
entry.c | 4 +-
environment.c | 20 +-
exec_cmd.c | 20 +-
fetch-clone.c | 33 +-
fetch-pack.c | 24 +-
fetch.c | 9 +-
fsck-objects.c | 44 +-
generate-cmdlist.sh | 1 +
git-branch.sh | 10 +
git-checkout.sh | 9 +-
git-cherry.sh | 3 -
git-clone.sh | 8 +-
git-commit.sh | 582 +--
git-compat-util.h | 18 +-
git-cvsexportcommit.perl | 2 +-
git-cvsserver.perl | 65 +-
git-fetch.sh | 26 +-
git-ls-remote.sh | 6 +-
...erge-recursive.py => git-merge-recursive-old.py | 0
git-merge.sh | 5 +-
git-parse-remote.sh | 43 +-
git-pull.sh | 2 +-
git-rebase.sh | 6 +-
git-repack.sh | 25 +-
git-reset.sh | 3 -
git-resolve.sh | 4 +
git-revert.sh | 14 +-
git-send-email.perl | 42 +-
git-shortlog.perl | 44 +-
git-svn.perl | 122 +-
git-svnimport.perl | 35 +-
git.c | 131 +-
git.spec.in | 23 +-
gitk | 682 +++-
gitweb/README | 61 +-
gitweb/git-favicon.png | Bin
gitweb/git-logo.png | Bin
gitweb/gitweb.css | 80 +-
gitweb/{gitweb.cgi => gitweb.perl} | 4459 ++++++++++++--------
grep.c | 498 +++
grep.h | 79 +
builtin-help.c => help.c | 4 +-
http-fetch.c | 303 +--
http-push.c | 95 +-
http.c | 12 +
http.h | 4 +
imap-send.c | 45 +-
index-pack.c | 16 +-
interpolate.c | 108 +
interpolate.h | 26 +
builtin-prune.c => list-objects.c | 255 +-
list-objects.h | 12 +
local-fetch.c | 8 +-
log-tree.c | 82 +-
merge-base.c | 2 +-
merge-file.c | 2 +-
merge-index.c | 5 +-
merge-recursive.c | 1351 ++++++
merge-tree.c | 10 +-
mktag.c | 2 +-
mktree.c | 5 +-
object-refs.c | 11 +-
object.c | 6 +-
object.h | 11 -
pack-check.c | 25 +-
pack-redundant.c | 18 +-
pager.c | 4 +-
patch-id.c | 2 +-
path-list.c | 5 +-
path.c | 10 +-
peek-remote.c | 5 +-
perl/.gitignore | 4 +
perl/Git.pm | 837 ++++
perl/Makefile.PL | 28 +
perl/private-Error.pm | 827 ++++
quote.c | 61 +
quote.h | 7 +
read-cache.c | 77 +-
receive-pack.c | 28 +-
refs.c | 26 +-
revision.c | 258 +-
revision.h | 14 +-
rsh.c | 31 +-
run-command.c | 8 +-
send-pack.c | 126 +-
server-info.c | 2 +-
setup.c | 2 +
sha1_file.c | 596 ++--
sha1_name.c | 60 +-
sideband.c | 78 +
sideband.h | 13 +
ssh-fetch.c | 10 +-
ssh-upload.c | 4 +-
t/t1200-tutorial.sh | 2 +-
t/t1400-update-ref.sh | 86 +-
t/t3200-branch.sh | 12 +
t/t3403-rebase-skip.sh | 4 +-
t/t3700-add.sh | 22 +
t/t4015-diff-whitespace.sh | 122 +
t/t4103-apply-binary.sh | 4 +-
t/t4104-apply-boundary.sh | 115 +
t/t4116-apply-reverse.sh | 85 +
t/t4117-apply-reject.sh | 157 +
t/t5400-send-pack.sh | 14 +
t/t5510-fetch.sh | 69 +
t/t5600-clone-fail-cleanup.sh | 6 +
t/t5710-info-alternate.sh | 2 +
t/t6001-rev-list-graft.sh | 113 +
t/t7002-grep.sh | 31 +-
t/t7201-co.sh | 9 +
t/test-lib.sh | 17 +-
trace.c | 150 +
tree-diff.c | 15 +-
tree-walk.c | 4 +-
tree.c | 5 +-
builtin-read-tree.c => unpack-trees.c | 474 +--
unpack-trees.h | 35 +
upload-pack.c | 190 +-
write_or_die.c | 45 +
wt-status.c | 276 ++
wt-status.h | 25 +
xdiff-interface.c | 12 +-
xdiff/xutils.c | 29 +-
237 files changed, 16898 insertions(+), 8168 deletions(-)
copy Documentation/{git-tar-tree.txt => git-archive.txt} (29%)
rewrite Documentation/git-rev-list.txt (61%)
rename Documentation/{git-upload-tar.txt => git-upload-archive.txt} (30%)
rewrite Documentation/gitk.txt (37%)
create mode 100644 Documentation/technical/racy-git.txt
copy builtin-tar-tree.c => archive-tar.c (59%)
create mode 100644 archive-zip.c
create mode 100644 archive.h
create mode 100644 builtin-archive.c
rename builtin-cat-file.c => builtin-cat-file.c (0%)
rename checkout-index.c => builtin-checkout-index.c (92%)
rename builtin-count.c => builtin-count-objects.c (99%)
rename name-rev.c => builtin-name-rev.c (97%)
rename pack-objects.c => builtin-pack-objects.c (81%)
create mode 100644 builtin-runstatus.c
rename symbolic-ref.c => builtin-symbolic-ref.c (75%)
rename unpack-objects.c => builtin-unpack-objects.c (82%)
create mode 100644 builtin-upload-archive.c
delete mode 100644 builtin-upload-tar.c
rename verify-pack.c => builtin-verify-pack.c (83%)
create mode 100644 check-racy.c
create mode 100644 color.c
create mode 100644 color.h
create mode 100644 compat/inet_pton.c
rewrite configure.ac (21%)
create mode 100755 contrib/completion/git-completion.bash
rename contrib/gitview/{gitview.txt => gitview.txt} (74%)
create mode 100644 contrib/vim/README
create mode 100644 contrib/vim/syntax/gitcommit.vim
rename git-merge-recursive.py => git-merge-recursive-old.py (100%)
create mode 100644 gitweb/git-favicon.png
create mode 100644 gitweb/git-logo.png
rename gitweb/{gitweb.cgi => gitweb.perl} (30%)
create mode 100644 grep.c
create mode 100644 grep.h
rename builtin-help.c => help.c (99%)
create mode 100644 interpolate.c
create mode 100644 interpolate.h
copy builtin-prune.c => list-objects.c (24%)
create mode 100644 list-objects.h
create mode 100644 merge-recursive.c
create mode 100644 perl/.gitignore
create mode 100644 perl/Git.pm
create mode 100644 perl/Makefile.PL
create mode 100644 perl/private-Error.pm
create mode 100644 sideband.c
create mode 100644 sideband.h
create mode 100755 t/t4015-diff-whitespace.sh
create mode 100755 t/t4104-apply-boundary.sh
create mode 100755 t/t4116-apply-reverse.sh
create mode 100755 t/t4117-apply-reject.sh
create mode 100755 t/t5510-fetch.sh
create mode 100755 t/t6001-rev-list-graft.sh
create mode 100644 trace.c
copy builtin-read-tree.c => unpack-trees.c (62%)
create mode 100644 unpack-trees.h
create mode 100644 write_or_die.c
create mode 100644 wt-status.c
create mode 100644 wt-status.h
Alan Chandler (2):
Update the gitweb/README file to include setting the GITWEB_CONFIG environment
Fix usage string to match that given in the man page
Alex Riesen (3):
Use const for interpolate arguments
fix daemon.c compilation for NO_IPV6=1
do not discard constness in interp_set_entry value argument
Alexandre Julliard (2):
git.el: Fixed inverted "renamed from/to" message.
vc-git.el: Switch to using git-blame instead of git-annotate.
Andy Whitcroft (4):
send-pack: remove remote reference limit
send-pack: switch to using git-rev-list --stdin
svnimport: add support for parsing From: lines for author
add proper dependancies on the xdiff source
Aneesh Kumar K.V (4):
gitweb: Support for snapshot
gitweb: fix snapshot support
gitweb: Make blame and snapshot a feature.
gitweb: Fix git_blame
Art Haas (1):
Patch for http-fetch.c and older curl releases
Christian Couder (9):
Trace into open fd and refactor tracing code.
Trace into a file or an open fd and refactor tracing code.
Update GIT_TRACE documentation.
Fix memory leak in prepend_to_path (git.c).
Move add_to_string to "quote.c" and make it extern.
Fix a memory leak in "connect.c" and die if command too long.
Fix space in string " false" problem in "trace.c".
Remove empty ref directories that prevent creating a ref.
Fix tracing when GIT_TRACE is set to an empty string.
David Rientjes (18):
blame.c return cleanup
builtin-grep.c cleanup
builtin-push.c cleanup
diff.c cleanup
http-push.c cleanup
read-cache.c cleanup
Make pprint_tag void and cleans up call in cmd_cat_file.
Make show_entry void
Make checkout_all void.
Make fsck_dir void.
Make pack_objects void.
Make track_tree_refs void.
Make upload_pack void and remove conditional return.
Make sha1flush void and remove conditional return.
make inline is_null_sha1 global
use appropriate typedefs
remove unnecessary initializations
Do not use memcmp(sha1_1, sha1_2, 20) with hardcoded length.
Dennis Stosberg (12):
"test" in Solaris' /bin/sh does not support -e
Makefile fix for Solaris
Add possibility to pass CFLAGS and LDFLAGS specific to the perl subdir
Solaris has strlcpy() at least since version 8
Look for sockaddr_storage in sys/socket.h
Fix detection of ipv6 on Solaris
Fix compilation with Sun CC
gitweb: Use --git-dir parameter instead of setting $ENV{'GIT_DIR'}
gitweb: Remove forgotten call to git_to_hash
use do() instead of require() to include configuration
lock_ref_sha1_basic does not remove empty directories on BSD
Add default values for --window and --depth to the docs
Dmitry V. Levin (3):
Make count-objects, describe and merge-tree work in subdirectory
Documentation: Fix broken links
Handle invalid argc gently
Eric Wong (13):
pass DESTDIR to the generated perl/Makefile
git-svn: establish new connections on commit after fork
git-svn: recommend rebase for syncing against an SVN repo
git-svn: add the 'dcommit' command
git-svn: stop repeatedly reusing the first commit message with dcommit
git-svn: multi-init saves and reuses --tags and --branches arguments
git-svn: log command fixes
Documentation/git-svn: document some of the newer features
git-svn: -h(elp) message formatting fixes
commit: fix a segfault when displaying a commit with unreachable parents
git-svn: add a message encouraging use of SVN::* libraries
git-svn: fix commits over svn+ssh://
git-svn: reduce memory usage for large commits
Franck Bui-Huu (11):
Add a newline before appending "Signed-off-by: " line
log-tree.c: cleanup a bit append_signoff()
Add git-archive
git-archive: wire up TAR format.
git-archive: wire up ZIP format.
Add git-upload-archive
connect.c: finish_connect(): allow null pid parameter
Test return value of finish_connect()
upload-archive: monitor child communication even more carefully.
git-archive: update documentation
Add git-upload-archive to the main git man page
Haavard Skinnemoen (1):
git-send-email: Don't set author_not_sender from Cc: lines
Jakub Narebski (139):
gitweb: whitespace cleanup
gitweb: Use list for of open for running git commands, thorougly.
gitweb: simplify git_get_hash_by_path
gitweb: More explicit error messages for open "-|"
gitweb: Cleanup - chomp $line in consistent style
gitweb: Cleanup - chomp @lines in consistent style
gitweb: Add git_page_nav for later use
gitweb: Navbar refactoring - use git_page_nav to generate navigation bar
gitweb: Replace form-feed character by ^L
gitweb: Show project descriptions with utf-8 characters in project list correctly
gitweb: Add "\n" after <br/> in git_page_nav
gitweb: Pager refactoring - use git_get_paging_nav for pagination
gitweb: Remove $project from git_get_paging_nav arguments
gitweb: Headers refactoring - use git_header_div for header divs
gitweb: Remove characters entities entirely when shortening string
gitweb: Ref refactoring - use git_get_referencing for marking tagged/head commits
gitweb: Refactor generation of shortlog, tags and heads body
gitweb: do not quote path for list version of open "-|"
gitweb: Remove characters entities entirely when shortening string -- correction
gitweb: Reordering code and dividing it into categories
gitweb: Refactoring git_project_list
autoconf: Add support for setting SHELL_PATH and PERL_PATH
autoconf: Move site configuration section earlier in configure.ac
autoconf: Add support for setting PYTHON_PATH or NO_PYTHON
autoconf: Check for ll hh j z t size specifiers introduced by C99
autoconf: Typo cleanup, reordering etc.
Copy description of new build configuration variables to configure.ac
autoconf: Set NEEDS_LIBICONV unconditionally if there is no iconv in libc
gitweb: Separate input validation and dispatch, add comment about opml action
gitweb: die_error first (optional) parameter is HTTP status
gitweb: Use undef for die_error to use default first (status) parameter value
gitweb: Don't undefine query parameter related variables before die_error
gitweb: Cleanup and uniquify error messages
gitweb: No periods for error messages
gitweb: No error messages with unescaped/unprotected user input
gitweb: PATH_INFO=/ means no project
gitweb: Inline $rss_link
gitweb: Refactor untabifying - converting tabs to spaces
gitweb: fix commitdiff for root commits
gitweb: Skip nonmatching lines in difftree output, consistently
autoconf: Unset NO_STH and NEED_STH when it is detected not needed
gitweb: Remove unused variables in git_shortlog_body and git_heads
autoconf: Add configure target to main Makefile
autoconf: Error out on --without-shell and --without-perl
autoconf: Improvements in NO_PYTHON/PYTHON_PATH handling
autoconf: Move variables which we always set to config.mak.in
autoconf: It is --without-python, not --no-python
autoconf: Add support for setting CURLDIR, OPENSSLDIR, EXPATDIR
gitweb: Whitespace cleanup - tabs are for indent, spaces are for align
gitweb: Great subroutines renaming
gitweb: Separate ref parsing in git_get_refs_list into parse_ref
gitweb: Refactor printing shortened title in git_shortlog_body and git_tags_body
gitweb: Separate main part of git_history into git_history_body
gitweb: Separate finding project owner into git_get_project_owner
gitweb: Change appereance of marker of refs pointing to given object
gitweb: Skip comments in mime.types like file
gitweb: True fix: Support for the standard mime.types map in gitweb
gitweb: Separate printing difftree in git_commit into git_difftree_body
gitweb: Show project's git URL on summary page
gitweb: Add support for per project git URLs
gitweb: Uniquify version info output, add meta generator in page header
gitweb: Refactor printing commit message
gitweb: Added parse_difftree_raw_line function for later use
gitweb: Use parse_difftree_raw_line in git_difftree_body
gitweb: bugfix: a.list formatting regression
gitweb: Replace some presentational HTML by CSS
gitweb: Whitespace cleanup: realign, reindent
gitweb: Use underscore instead of hyphen to separate words in HTTP headers names
gitweb: Route rest of action subroutines through %actions
gitweb: Use here-doc
gitweb: Drop the href() params which keys are not in %mapping
gitweb: Sort CGI parameters returned by href()
gitweb: Use git-diff-tree patch output for commitdiff
gitweb: Show information about incomplete lines in commitdiff
gitweb: Remove invalid comment in format_diff_line
gitweb: Streamify patch output in git_commitdiff
gitweb: Add git_get_{following,preceding}_references functions
gitweb: Faster return from git_get_preceding_references if possible
gitweb: Add git_get_rev_name_tags function
gitweb: Use git_get_name_rev_tags for commitdiff_plain X-Git-Tag: header
gitweb: Add support for hash_parent_base parameter for blobdiffs
gitweb: Allow for pre-parsed difftree info in git_patchset_body
gitweb: Parse two-line from-file/to-file diff header in git_patchset_body
gitweb: Add invisible hyperlink to from-file/to-file diff header
gitweb: Always display link to blobdiff_plain in git_blobdiff
gitweb: Change here-doc back for style consistency in git_blobdiff
gitweb: Use git-diff-tree or git-diff patch output for blobdiff
gitweb: git_blobdiff_plain is git_blobdiff('plain')
gitweb: Remove git_diff_print subroutine
gitweb: Remove creating directory for temporary files
gitweb: git_annotate didn't expect negative numeric timezone
gitweb: Remove workaround for git-diff bug fixed in f82cd3c
gitweb: Improve comments about gitweb features configuration
gitweb: blobs defined by non-textual hash ids can be cached
gitweb: Fix typo in git_difftree_body
gitweb: Fix typo in git_patchset_body
gitweb: Remove unused git_get_{preceding,following}_references
gitweb: Remove git_to_hash function
gitweb: Use @diff_opts, default ('M'), as git-diff and git-diff-tree paramete
gitweb: Make git_print_log generic; git_print_simplified_log uses it
gitweb: Do not remove signoff lines in git_print_simplified_log
gitweb: Add author information to commitdiff view
gitweb: git_print_log: signoff line is non-empty line
gitweb: Add diff tree, with links to patches, to commitdiff view
gitweb: Add local time and timezone to git_print_authorship
gitweb: Move git-ls-tree output parsing to parse_ls_tree_line
gitweb: Separate printing of git_tree row into git_print_tree_entry
gitweb: Extend parse_difftree_raw_line to save commit info
gitweb: Change the name of diff to parent link in "commit" view to "diff
gitweb: Add GIT favicon, assuming image/png type
gitweb: Correct typo: '==' instead of 'eq' in git_difftree_body
gitweb: Divide page path into directories -- path's "breadcrumbs"
autoconf: Add -liconv to LIBS when NEEDS_LIBICONV
autoconf: Check for subprocess.py
autoconf: Quote AC_CACHE_CHECK arguments
autoconf: Fix copy'n'paste error
autoconf: Set NO_ICONV if iconv is found neither in libc, nor in libiconv
autoconf: Add support for setting NO_ICONV and ICONVDIR
autoconf: Add config.cache to .gitignore
gitweb: Make pickaxe search a feature
gitweb: Paginate history output
gitweb: Use File::Find::find in git_get_projects_list
gitweb: Do not parse refs by hand, use git-peek-remote instead
gitweb: Add git_project_index for generating index.aux
gitweb: Allow for href() to be used for links without project param
gitweb: Add link to "project_index" view to "project_list" page
gitweb: Fix mimetype_guess_file for files with multiple extensions
gitweb: Even more support for PATH_INFO based URLs
gitweb: Require project for almost all actions
gitweb: Always use git-peek-remote in git_get_references
gitweb: Make git_get_refs_list do work of git_get_references
gitweb: Fix thinko in git_tags and git_heads
gitweb: Make git_get_hash_by_path check type if provided
gitweb: Strip trailing slashes from $path in git_get_hash_by_path
gitweb: Use "return" instead of "return undef" for some subs
gitweb: Split validate_input into validate_pathname and validate_refname
gitweb: Add git_url subroutine, and use it to quote full URLs
gitweb: Quote filename in HTTP Content-Disposition: header
gitweb: Cleanup Git logo and Git logo target generation
Jeff King (9):
gitweb: optionally read config from GITWEB_CONFIG
diff: support custom callbacks for output
Move color option parsing out of diff.c and into color.[ch]
git-commit.sh: convert run_status to a C builtin
git-status: document colorization config options
contrib/vim: add syntax highlighting file for commits
wt-status: remove extraneous newline from 'deleted:' output
rev-list: fix segfault with --{author,committer,grep}
git-repack: allow git-repack to run in subdirectory
Johannes Schindelin (38):
Git.xs: older perl do not know const char *
Status update on merge-recursive in C
Cumulative update of merge-recursive in C
merge-recur: Convert variable names to lower_case
merge-recur: Get rid of debug code
merge-recur: Remove dead code
merge-recur: Fix compiler warning with -pedantic
merge-recur: Cleanup last mixedCase variables...
merge-recur: Explain why sha_eq() and struct stage_data cannot go
merge-recur: fix thinko in unique_path()
read-trees: refactor the unpack_trees() part
read-tree: move merge functions to the library
merge-recur: use the unpack_trees() interface instead of exec()ing read-tree
merge-recur: virtual commits shall never be parsed
merge-recursive: fix rename handling
http-push: avoid fork() by calling merge_bases() directly
merge-recur: do not call git-write-tree
merge-recur: do not setenv("GIT_INDEX_FILE")
merge-recur: if there is no common ancestor, fake empty one
merge-recur: try to merge older merge bases first
merge-recur: do not die unnecessarily
discard_cache(): discard index, even if no file was mmap()ed
Add the --color-words option to the diff options family
builtin-mv: readability patch
unpack-objects: remove unused variable "eof"
Makefile: fix typo
Remove uneeded #include
fmt-merge-msg: fix off-by-one bug
Teach runstatus about --untracked
add receive.denyNonFastforwards config variable
receive-pack: plug memory leak in fast-forward checking code.
Document receive.denyNonFastforwards
runstatus: do not recurse into subdirectories if not needed
daemon: default to 256 for HOST_NAME_MAX if it is not defined
diff --stat: ensure at least one '-' for deletions, and one '+' for additions
diff: fix 2 whitespace issues
cvsserver: Show correct letters for modified, removed and added files
cvsserver: fix "cvs diff" in a subdirectory
Jon Loeliger (3):
Add virtualization support to git-daemon
Cleaned up git-daemon virtual hosting support.
Removed memory leaks from interpolation table uses.
Jonas Fonseca (21):
git-apply(1): document missing options and improve existing ones
git-ls-remote(1): document --upload-pack
git-blame(1): mention options in the synopsis and advertise pickaxe
gitk(1): expand the manpage to look less like a template
git(7): put the synopsis in a verse style paragraph
gitview.txt: improve asciidoc markup
git-svn(1): improve asciidoc markup
describe: fix off-by-one error in --abbrev=40 handling
Use PATH_MAX instead of MAXPATHLEN
Use xrealloc instead of realloc
Use fstat instead of fseek
Use xcalloc instead of calloc
Add --relative-date option to the revision interface
git(7): move gitk(1) to the list of porcelain commands
Use xmalloc instead of malloc
Include config.mak.autogen in the doc Makefile
git-rev-list(1): group options; reformat; document more options
git-apply(1): document --unidiff-zero
git-repack(1): document --window and --depth
Fix trivial typos and inconsistencies in hooks documentation
gitk(1): mention --all
Junio C Hamano (139):
Perl interface: add build-time configuration to allow building with -fPIC
Perl interface: make testsuite work again.
perl: fix make clean
Git.pm: tentative fix to test the freshly built Git.pm
Perly Git: arrange include path settings properly.
Makefile: Set USE_PIC on x86-64
Perly git: work around buggy make implementations.
Git.pm: clean generated files.
Perly Git: make sure we do test the freshly built one.
INSTALL: a tip for running after building but without installing.
Work around sed and make interactions on the backslash at the end of line.
upload-pack: use object pointer not copy of sha1 to keep track of has/needs.
upload-pack: lift MAX_NEEDS and MAX_HAS limitation
recur vs recursive: help testing without touching too many stuff.
sha1_file.c: expose map_sha1_file() interface.
pack-objects: reuse deflated data from new-style loose objects.
unpack-objects: read configuration data upon startup.
Makefile: git-merge-recur depends on xdiff libraries.
gitweb: There can be more than two levels of subdirectories
gitweb: an obvious cut and paste error.
gitweb: fix use of uninitialized value.
gitweb: when showing history of a tree, show tree link not blob
gitweb: avoid undefined value warning in print_page_path
gitweb/README: do not bug Kay with gitweb questions anymore
Makefile: gitweb/gitweb.cgi is now generated.
gitweb: do not use @@FOO@@ for replaced tokens
.gitignore: git-merge-recur is a built file.
Make git-checkout-index a builtin
builtins: Makefile clean-up
git.c: Rename NEEDS_PREFIX to RUN_SETUP
autoconf: fix NEEDS_SSL_WITH_CRYPTO
autoconf: NO_IPV6
Racy git: avoid having to be always too careful
read-cache: tweak racy-git delay logic
autoconf: clean temporary file mak.append
git-grep: show pathnames relative to the current directory
upload-pack: minor clean-up in multi-ack logic
Fix type of combine-diff.c::show_patch_diff()
Remove combine-diff.c::uninteresting()
t4116 apply --reverse test
git-apply --reverse: simplify reverse option.
git-apply --binary: clean up and prepare for --reverse
avoid nanosleep(2)
Documentation/technical/racy-git.txt
Add check program "git-check-racy"
Remove the "delay writing to avoid runtime penalty of racy-git avoidance"
builtin-grep: remove unused debugging cruft.
builtin-apply --reverse: two bugfixes.
diff.c: make binary patch reversible.
apply --reverse: tie it all together.
git-apply --reject
git-apply --reject: send rejects to .rej files.
git-apply --verbose
apply --reject: count hunks starting from 1, not 0
Convert memset(hash,0,20) to hashclr(hash).
hashcpy/hashcmp remaining bits.
builtin-grep.c: remove unused debugging piece.
update-index -g
git-apply --reject: finishing touches.
free(NULL) is perfectly valid.
daemon: prepare for multiple services.
daemon: add upload-tar service.
multi-service daemon: documentation
t5710: fix two thinkos.
Constness tightening for move/link_temp_to_file()
consolidate two copies of new style object header parsing code.
pack-objects: re-validate data we copy from elsewhere.
Revert "Convert git-annotate to use Git.pm"
Revert "Git.pm: Introduce fast get_object() method"
Revert "Make it possible to set up libgit directly (instead of from the environment)"
pack-objects: fix thinko in revalidate code
more lightweight revalidation while reusing deflated stream in packing
unpack-objects desperately salvages objects from a corrupt pack
revision.c: allow injecting revision parameters after setup_revisions().
Teach rev-list an option to read revs from the standard input.
Revert "daemon: add upload-tar service."
Make apply --binary a no-op.
diff --binary generates full index on binary files.
Separate object listing routines out of rev-list
pack-objects: run rev-list equivalent internally.
pack-objects: further work on internal rev-list logic.
pack-objects --unpacked=<existing pack> option.
get_sha1_hex() micro-optimization
archive: allow remote to have more formats than we understand.
Move sideband client side support into reusable form.
Move sideband server side support into reusable form.
archive: force line buffered output to stderr
Add --verbose to git-archive
Teach --exec to git-archive --remote
Prepare larger packet buffer for upload-pack protocol.
Add sideband status report to git-archive protocol
upload-archive: monitor child communication more carefully.
builtin-archive.c: rename remote_request() to extract_remote_arg()
pack-objects: document --revs, --unpacked and --all.
http-fetch: fix alternates handling.
unpack-objects -r: call it "recover".
Document git-grep -[Hh]
Define fallback PATH_MAX on systems that do not define one in <limits.h>
Fix git-am safety checks
http-fetch.c: consolidate code to detect missing fetch target
Add ftp:// protocol support for git-http-fetch
t1400: make test debuggable.
apply --unidiff-zero: loosen sanity checks for --unidiff=0 patches
builtin-grep: make pieces of it available as library.
revision traversal: prepare for commit log match.
revision traversal: --author, --committer, and --grep.
repack: use only pack-objects, not rev-list.
Update grep internal for grepping only in head/body
git log: Unify header_filter and message_filter into one.
Make hexval() available to others.
sha1_name.c: understand "describe" output as a valid object name
diff.c: second war on whitespace.
git-apply: second war on whitespace.
Add t5510 to test per branch configuration affecting git-fetch.
Remove upload-tar and make git-tar-tree a thin wrapper to git-archive
Deprecate merge-recursive.py
diff --stat: allow custom diffstat output width.
diff --stat: color output.
An illustration of rev-list --parents --pretty=raw
grep: free expressions and patterns when done.
grep: fix --fixed-strings combined with expression.
Contributed bash completion support for core Git tools.
git-diff -B output fix.
Remove -fPIC which was only needed for Git.xs
GIT 1.4.3-rc1
Makefile: install and clean merge-recur, still.
escape tilde in Documentation/git-rev-parse.txt
tar-tree deprecation: we eat our own dog food.
gitweb: Make the Git logo link target to point to the homepage
git-send-email: avoid uninitialized variable warning.
cherry-pick: make -r the default
Add WEBDAV timeout to http-fetch.
Fix git-revert
git-fetch --update-head-ok typofix
git-pull: we say commit X, not X commit.
git.spec.in: perl subpackage is installed in perl_vendorlib not vendorarch
apply --numstat -z: line termination fix.
t4015: work-around here document problem on Cygwin.
Revert "move pack creation to version 3"
Linus Torvalds (10):
Relative timestamps in git log
git-fsck-objects: lacking default references should not be fatal
Fix git-fsck-objects SIGSEGV/divide-by-zero
Add "-h/-H" parsing to "git grep"
Allow multiple "git_path()" uses
git-log --author and --committer are not left-anchored by default
Clean up approxidate() in preparation for fixes
Fix approxidate() to understand more extended numbers
diff --stat=width[,name-width]: allow custom diffstat output width.
Fix approxidate() to understand 12:34 AM/PM are 00:34 and 12:34
Liu Yubao (1):
Fix duplicate xmalloc in builtin-add
Luben Tuikov (22):
gitweb: git_tree displays blame based on repository config
gitweb: bugfix: git_commit and git_commitdiff parents
gitweb: blame table row no highlight fix
gitweb: bugfix: commitdiff regression
gitweb: bugfix: git_print_page_path() needs the hash base
gitweb: tree view: eliminate redundant "blob"
gitweb: Remove redundant "tree" link
gitweb: extend blame to show links to diff and previous
Revert "gitweb: extend blame to show links to diff and previous"
gitweb: Remove excessively redundant entries from git_difftree_body
gitweb: Add history and blame to git_difftree_body()
gitweb: "alternate" starts with shade (i.e. 1)
gitweb: Remove redundant "commit" link from shortlog
gitweb: Factor out gitweb_have_snapshot()
gitweb: Add snapshot to shortlog
gitweb: Don't use quotemeta on internally generated strings
gitweb: Remove redundant "commit" from history
gitweb: History: blob and tree are first, then commitdiff, etc
gitweb: tree view: hash_base and hash are now context sensitive
gitweb: Escape ESCAPE (\e) character
gitweb: Do not print "log" and "shortlog" redundantly in commit view
gitweb: blame: Minimize vertical table row padding
Markus Amsler (1):
git-imap-send: Strip smtp From_ header from imap message.
Martin Langhoff (1):
git-repack: create new packs inside $GIT_DIR, not cwd
Martin Waitz (16):
gitweb: fill in gitweb configuration by Makefile
gitweb: use out-of-line GIT logo.
gitweb: provide function to format the URL for an action link.
gitweb: consolidate action URL generation.
gitweb: continue consolidation of URL generation.
gitweb: support for "fp" parameter.
gitweb: support for / as home_link.
gitweb: fix project list if PATH_INFO=="/".
gitweb: more support for PATH_INFO based URLs
gitweb: fix uninitialized variable warning.
gitweb: fix display of trees via PATH_INFO.
gitweb: document webserver configuration for common gitweb/repo URLs.
git-commit: cleanup unused function.
git-commit: fix coding style.
test-lib: separate individual test better in verbose mode.
paginate git-diff by default
Matthias Kestenholz (6):
Make git-name-rev a builtin
Make git-pack-objects a builtin
Make git-unpack-objects a builtin
Make git-symbolic-ref a builtin
Add gitweb.cgi to .gitignore
Check if pack directory exists prior to descending into it
Matthias Lederhofer (12):
pager: environment variable GIT_PAGER to override PAGER
gitweb: use a hash to lookup the sub for an action
gitweb: require $ENV{'GITWEB_CONFIG'}
gitweb: check if HTTP_ACCEPT is really set
gitweb: fix commitdiff_plain for root commits
gitweb: fix $project usage
gitweb: do not use 'No such directory' error message
gitweb: export options
gitweb: fix warnings in PATH_INFO code and add export_ok/strict_export
gitweb fix validating pg (page) parameter
format-patch: use cwd as default output directory
git-format-patch: fix bug using -o in subdirectories
Nicolas Pitre (4):
move pack creation to version 3
many cleanups to sha1_file.c
add commit count options to git-shortlog
atomic write for sideband remote messages
Paul Mackerras (10):
gitk: Minor cleanups
gitk: Recompute ancestor/descendent heads/tags when rereading refs
gitk: Add a row context-menu item for creating a new branch
gitk: Add a context menu for heads
gitk: Fix a couple of buglets in the branch head menu items
gitk: Add a menu item for cherry-picking commits
gitk: Update preceding/following tag info when creating a tag
gitk: Improve responsiveness while reading and layout out the graph
gitk: Fix some bugs in the new cherry-picking code
diff-index --cc shows a 3-way diff between HEAD, index and working tree.
Pavel Roskin (3):
Fix probing for already installed Error.pm
Delete manuals if compiling without docs
Make perl interface a separate package
Petr Baudis (48):
Introduce Git.pm (v4)
Git.pm: Implement Git::exec_path()
Git.pm: Call external commands using execv_git_cmd()
Git.pm: Implement Git::version()
Add Error.pm to the distribution
Git.pm: Better error handling
Git.pm: Handle failed commands' output
Git.pm: Enhance the command_pipe() mechanism
Git.pm: Implement options for the command interface
Git.pm: Add support for subdirectories inside of working copies
Convert git-mv to use Git.pm
Git.pm: assorted build related fixes.
Git.pm: Try to support ActiveState output pipe
Git.pm: Swap hash_object() parameters
Git.pm: Fix Git->repository("/somewhere/totally/elsewhere")
Git.pm: Support for perl/ being built by a different compiler
Git.pm: Remove PerlIO usage from Git.xs
Git.pm: Avoid ppport.h
Git.pm: Don't #define around die
Use $GITPERLLIB instead of $RUNNING_GIT_TESTS and centralize @INC munging
Git.pm: Add config() method
Convert git-send-email to use Git.pm
Git.pm: Introduce ident() and ident_person() methods
Make it possible to set up libgit directly (instead of from the environment)
Git.pm: Introduce fast get_object() method
Convert git-annotate to use Git.pm
Eliminate Scalar::Util usage from private-Error.pm
Fix showing of path in tree view
gitweb: Link (HEAD) tree for each project from projects list
gitweb: More per-view navigation bar links
gitweb: Link to tree instead of snapshot in shortlog
gitweb: Link to latest tree from the head line in heads list
gitweb: Link to associated tree from a particular log item in full log view
gitweb: Rename "plain" labels to "raw"
gitweb: Relabel "head" as "HEAD"
Make path in tree view look nicer
gitweb: Fix tree link associated with each commit log entry.
gitweb: Fix @git_base_url_list usage
Fix snapshot link in tree view
Git.pm: Kill Git.xs for now
Deprecate git-resolve.sh
gitweb: Consolidate escaping/validation of query string
gitweb: fix over-eager application of esc_html().
Show snapshot link in shortlog only if have_snapsho
gitweb: Separate (new) and (deleted) in commitdiff by a space
gitweb: Handle commits with empty commit messages more reasonably
gitweb: [commit view] Do not suppress commitdiff link in root commit
svnimport: Fix broken tags being generated
Pierre Habouzit (7):
Fix a comparison bug in diff-delta.c
avoid to use error that shadows the function name, use err instead.
git_dir holds pointers to local strings, hence MUST be const.
missing 'static' keywords
remove ugly shadowing of loop indexes in subloops.
use name[len] in switch directly, instead of creating a shadowed variable.
n is in fact unused, and is later shadowed.
Randal L. Schwartz (1):
builtin-upload-archive.c broken on openbsd
Rene Scharfe (21):
git-verify-pack: make builtin
Axe the last ent
Add write_or_die(), a helper function
Add git-zip-tree
git-cherry: remove unused variable
git-reset: remove unused variable
Add git-zip-tree to .gitignore
git-archive: make compression level of ZIP archives configurable
Use xstrdup instead of strdup in builtin-{tar,zip}-tree.c
git-archive: inline default_parse_extra()
git-tar-tree: devolve git-tar-tree into a wrapper for git-archive
Remove git-zip-tree
Rename builtin-zip-tree.c to archive-zip.c
git-tar-tree: Remove duplicate git_config() call
git-tar-tree: Move code for git-archive --format=tar to archive-tar.c
git-tar-tree: don't RUN_SETUP
Documentation: add missing second colons and remove a typo
Add hash_sha1_file()
Make write_sha1_file_prepare() static
Make write_sha1_file_prepare() void
Replace open-coded version of hash_sha1_file()
Robin Rosenberg (3):
Quote arguments to tr in test-lib
Make cvsexportcommit remove files.
Error in test description of t1200-tutorial
Santi Béjar (4):
Fetch: default remote repository from branch properties
fetch: get the remote branches to merge from the branch properties
Add test for the default merges in fetch.
fetch: Reset remote refs list each time fetch_main is called
Sasha Khapyorsky (3):
Trivial support for cloning and fetching via ftp://.
git-svnimport: Parse log message for Signed-off-by: lines
http/ftp: optionally ask curl to not use EPSV command
Sergey Vlasov (2):
Documentation: Fix howto/revert-branch-rebase.html generation
git-svn: Fix fetch --no-ignore-externals with GIT_SVN_NO_LIB=1
Shawn Pearce (15):
Verify we know how to read a pack before trying to using it.
Remove unnecessary forward declaration of unpack_entry.
Convert memcpy(a,b,20) to hashcpy(a,b).
Convert memcpy(a,b,20) to hashcpy(a,b).
Reorganize/rename unpack_non_delta_entry to unpack_compressed_entry.
Reuse compression code in unpack_compressed_entry.
Cleanup unpack_entry_gently and friends to use type_name array.
Cleanup unpack_object_header to use only offsets.
Convert unpack_entry_gently and friends to use offsets.
Replace uses of strdup with xstrdup.
Allow 'svn fetch' on '(no date)' revisions in Subversion.
Allow '(no author)' in git-svn's authors file.
Ignore executable bit when adding files if filemode=0.
Allow git-checkout when on a non-existant branch.
Corrected copy-and-paste thinko in ignore executable bit test case.
Tilman Sauerbeck (2):
Indentation fix.
Added support for dropping privileges to git-daemon.
Timo Hirvonen (2):
--name-only, --name-status, --check and -s are mutually exclusive
Remove awkward compatibility warts
Ville Skyttä (1):
Be nicer if git executable is not installed
Yasushi SHOJI (4):
gitweb: configurable home link string
gitweb: Decode long title for link tooltips
gitweb: refactor decode() for utf8 conversion
clone: the given repository dir should be relative to $PWD
^ permalink raw reply
* Re: [ANNOUNCE] Example Cogito Addon - cogito-bundle
From: Johannes Schindelin @ 2006-10-18 23:50 UTC (permalink / raw)
To: Nicolas Pitre; +Cc: git
In-Reply-To: <Pine.LNX.4.64.0610181910440.1971@xanadu.home>
Hi,
On Wed, 18 Oct 2006, Nicolas Pitre wrote:
> Pretty trivial indeed.
Easy! You take all the fun out of it!
Ciao,
Dscho
^ permalink raw reply
* Re: VCS comparison table
From: Sean @ 2006-10-18 23:49 UTC (permalink / raw)
To: Charles Duffy; +Cc: git, bazaar-ng
In-Reply-To: <eh6dgr$pu8$1@sea.gmane.org>
On Wed, 18 Oct 2006 18:31:32 -0500
Charles Duffy <cduffy@spamcop.net> wrote:
> Granted, I'm speaking with my IT hat on here rather than my developer
> hat -- but plugins are a pretty clear usability win.
Sure they can be. But their value I think is overstated, especially
in an open source project where anyone can grab a copy of the source
and update it with a trial feature. This updated copy can be wrapped
in a nice GUI installer just as easily as any plugin.
Now, I suppose plugins let end users mix and match trial features
slightly easier, but hopefully your base package isn't so devoid of
features that this is honestly necessary.
As Petr pointed out, all this comes to Bzr essentially for free
since it's a part of python. So be it, but I've yet to hear an
example where plugins were anything more than a minor convenience
rather than a fundamental win over the way Git is developing.
For an example, just look how few lines of git were needed to
implement the essential features of the bzr bundle feature.
With no plugins or monkey business needed ;o)
Sean
^ permalink raw reply
* Re: VCS comparison table
From: Jakub Narebski @ 2006-10-18 23:48 UTC (permalink / raw)
To: git; +Cc: bazaar-ng
In-Reply-To: <eh6dgr$pu8$1@sea.gmane.org>
Charles Duffy wrote:
> Sean wrote:
>> You'll need a better example than that. Git has supported a version
>> of Cygwin-compatible symlink support on Windows for quite some time.
>> And no plugins were needed.
>
> The win32-compatible symlink support is not, in and of itself, the point.
>
> The point is that core, pervasive functionality can be modified at
> runtime, with no recompilation or installation of tools not included in
> the bzr package itself, simply by dropping a directory into place. This
> means that folks who don't have the skillset to merge three branches
> together (say, upstream plus two different trees adding extra
> functionality) and run a build can still install a few plugins to
> enhance their copy of bzr (which was installed by their IT staff, or a
> shiny click-through idiot-friendly Windows installer, etc).
You don't need plugins for that. Take for example git-svn (perhaps not the
best example, as it is Perl script; but Python although has compiled form
is script language at heart), which went AFAIK from external contribution,
to being in contrib/, to being in mainline (and in git-svn package).
About plugins modifying some core functionality: this is rather sign
of not attracting developers to do it in-core...
--
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
^ permalink raw reply
* Re: VCS comparison table
From: Johannes Schindelin @ 2006-10-18 23:48 UTC (permalink / raw)
To: Charles Duffy; +Cc: git, bazaar-ng
In-Reply-To: <eh6dgr$pu8$1@sea.gmane.org>
Hi,
On Wed, 18 Oct 2006, Charles Duffy wrote:
> The point is that core, pervasive functionality can be modified at
> runtime, with no recompilation or installation of tools not included in
> the bzr package itself, simply by dropping a directory into place.
Please note that this is not welcome here. I _need_ to trust my SCM. And
_that_ means that no strange non-mainline beast can be allowed to change
core features.
So, the wonderful upside of plugins you described here are actually the
reason I will never, _never_ use bzr with plugins.
Ciao,
Dscho
--
It's not paranoia. It's called experience.
^ permalink raw reply
* Re: VCS comparison table
From: Johannes Schindelin @ 2006-10-18 23:38 UTC (permalink / raw)
To: Shawn Pearce; +Cc: git
In-Reply-To: <20061018213703.GE19194@spearce.org>
Hi,
On Wed, 18 Oct 2006, Shawn Pearce wrote:
> Today Git doesn't run natively on Windows.
As I mentioned some time ago, I started a branch on MinGW. It works quite
well for the moment, but it lacks fork() emulation, and glob() emulation.
And I lack the time to continue working on it.
> Today Git is typically extended (at least initially in prototyping
> mode) through Perl, Python, TCL or Bourne shell scripts. Although
> the first three are available natively on Windows the last requires
> Cygwin... and we've had some issues with ActiveState Perl on Windows
> in the past too.
Those are not the only problems with scripting. Scripting is fine for
prototyping, but _anything_ remotely serious should be implemented using a
portable (!) and safe (!) API.
Ciao,
Dscho
^ permalink raw reply
* Re: VCS comparison table
From: Charles Duffy @ 2006-10-18 23:31 UTC (permalink / raw)
To: git; +Cc: bazaar-ng
In-Reply-To: <BAYC1-PASMTP069C473B2E79389E5BFC92AE0F0@CEZ.ICE>
Sean wrote:
> You'll need a better example than that. Git has supported a version
> of Cygwin-compatible symlink support on Windows for quite some time.
> And no plugins were needed.
The win32-compatible symlink support is not, in and of itself, the point.
The point is that core, pervasive functionality can be modified at
runtime, with no recompilation or installation of tools not included in
the bzr package itself, simply by dropping a directory into place. This
means that folks who don't have the skillset to merge three branches
together (say, upstream plus two different trees adding extra
functionality) and run a build can still install a few plugins to
enhance their copy of bzr (which was installed by their IT staff, or a
shiny click-through idiot-friendly Windows installer, etc).
And yes, there are people like that who are part of bzr's target
audience. Think (of the lower end of the set of) DBAs, QA folk and such.
Granted, I'm speaking with my IT hat on here rather than my developer
hat -- but plugins are a pretty clear usability win.
^ permalink raw reply
* Re: [ANNOUNCE] Example Cogito Addon - cogito-bundle
From: Shawn Pearce @ 2006-10-18 23:22 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Linus Torvalds, git
In-Reply-To: <7vslhlxmt3.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> wrote:
> Linus Torvalds <torvalds@osdl.org> writes:
>
> > On Wed, 18 Oct 2006, Junio C Hamano wrote:
> >>
> >> It should not be hard to write another program that generates a
> >> packfile like pack-object does but taking a thin pack as its
> >> input. Then receive-pack can drive it instead of
> >> unpack-objects.
> >
> > Give me half an hour. It should be trivial to make "unpack-objects" write
> > the "unpacked" objects into a pack-file instead.
>
> Heh, three people having the same idea that goes in the same
> direction at the same time is not necessarily a good sign of
> efficient project management...
Or maybe it is just a sign of a good way to resolve the issue I
was raising. :-)
--
Shawn.
^ permalink raw reply
* Re: [ANNOUNCE] Example Cogito Addon - cogito-bundle
From: Nicolas Pitre @ 2006-10-18 23:18 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Junio C Hamano, Shawn Pearce, git
In-Reply-To: <Pine.LNX.4.64.0610181542160.3962@g5.osdl.org>
On Wed, 18 Oct 2006, Linus Torvalds wrote:
>
>
> On Wed, 18 Oct 2006, Junio C Hamano wrote:
> >
> > It should not be hard to write another program that generates a
> > packfile like pack-object does but taking a thin pack as its
> > input. Then receive-pack can drive it instead of
> > unpack-objects.
>
> Give me half an hour. It should be trivial to make "unpack-objects" write
> the "unpacked" objects into a pack-file instead.
If you use builtin-unpack-objects.c from next, you'll be able to
generate the pack index pretty easily as well, as all the needed info is
stored in the obj_list array. Just need to append objects remaining on
the delta_list array to the end of the pack, sort the obj_list by sha1
and write the index.
Pretty trivial indeed.
Nicolas
^ 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