Commit graph

21677 commits

Author SHA1 Message Date
Linus Torvalds
ccc4feb579 Convert the index file reading/writing to use network byte order.
This allows using a git tree over NFS with different byte order, and
makes it possible to just copy a fully populated repository and have
the end result immediately usable (needing just a refresh to update
the stat information).
2005-04-15 10:44:27 -07:00
David Woodhouse
27de946d0e [PATCH] Simplify date handling and make it more reliable
This make all dates be stores as seconds since UTC epoch, with the
author's or committer's timezone as auxiliary data so that dates can be
pretty-printed in the original timezone later if anyone cares.  I left
the date parsing in rev-tree.c for backward compatibility but it can be
dropped when we change to base64 :)

commit-tree now eats RFC2822 dates as AUTHOR_DATE because that's
what you're going to want to feed it.

Yes, glibc sucks and strptime is a pile of crap. We have to parse it
ourselves.
2005-04-15 08:39:57 -07:00
Junio C Hamano
aa1c48df81 [PATCH] ls-tree enhancements
This adds '-r' (recursive) option and '-z' (NUL terminated)
option to ls-tree.  I need it so that the merge-trees (formerly
known as git-merge.perl) script does not need to create any
temporary dircache while merging.  It used to use show-files on
a temporary dircache to get the list of files in the ancestor
tree, and also used the dircache to store the result of its
automerge.  I probably still need it for the latter reason, but
with this patch not for the former reason anymore.

It is relative to bb95843a5a0f397270819462812735ee29796fb4

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-15 08:37:05 -07:00
Linus Torvalds
33deb63a36 Add "merge-tree" helper program. Maybe it's retarded, maybe it's helpful.
It only works one directory level at a time, so lookout..
2005-04-14 01:37:23 -07:00
Linus Torvalds
458754a9fe Use common "revision.h" header for both fsck and rev-tree.
It's really a very generic thing: the notion of one sha1 revision
referring to another one. "fsck" uses it for all nodes, and "rev-tree"
only tracks commit-node relationships, but the code was already
the same - now we just make that explicit by moving it to a common
header file.
2005-04-13 21:37:59 -07:00
Linus Torvalds
f864ba7448 Fix read-cache.c collission check logic.
Not only did it test the #define the wrong way around, but
it also leaked file descriptors and VM space. This should
fix it.
2005-04-13 17:47:12 -07:00
Linus Torvalds
bcee6fd8e7 Make 'fsck' able to take an arbitrary number of parents on the
command line.

"arbitrary" is a bit wrong, since it is limited by the argument
size limit (128kB or so), but let's see if anybody ever cares.
Arguably you should prune your tree before you have a few thousand
dangling heads in your archive.

We can fix it by passing in a file listing if we ever care.
2005-04-13 16:42:09 -07:00
Linus Torvalds
2845dbe4a4 Make fsck reachability avoid doing unnecessary work for
parents that we reach multiple ways.

This doesn't matter right now. It _will_ matter once we have
complex revision graphs.
2005-04-13 12:35:08 -07:00
Linus Torvalds
d9839e0305 Make "fsck-cache" use the same revision tracking structure as "rev-tree".
This makes things a lot more efficient, and makes it trivial to do things
like reachability analysis.

Add command line flags to tell what the head is, and whether to warn
about unreachable objects.
2005-04-13 09:57:30 -07:00
Petr Baudis
33b238d128 [PATCH] Change diff-tree output format
Changes diff-tree output format so that fields are separated by tabs instead of
spaces (readibility, parseability), and tree entry type is listed along the
entry (avoids having to figure that out from the mode in the scripts).

This is what my scripts expect.

Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 02:42:04 -07:00
Petr Baudis
35bb47855d [PATCH] diff-tree usage
Fix diff-tree usage, since it takes -r instead of -R now.

Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 02:39:33 -07:00
Petr Baudis
5ade862839 [PATCH] nsec portability
It seems like the nsec portability is limited; in particular, older
glibcs (<=2.2.4 at least) don't seem to like it. So access the nsec
fields in struct stat only when -DNSEC.

Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 02:38:44 -07:00
Ingo Molnar
aebb267908 [PATCH] Whitespace Fixes
Trivial whitespace fixes.

From: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 02:35:04 -07:00
Junio C Hamano
42d545e8ff [PATCH] No need to clean temp_git_file_* anymore
Ancient cat-file command used to leave temp_git_file_* and there
was support to remove them in the clean target of Makefile.  I
do not think it is needed anymore.

From: Junio C Hamano <junkio@cox.net>
Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 02:32:13 -07:00
Junio C Hamano
31cedfb95e [PATCH] Typofix in git/show-files.
Fixes a typo in usage string.

From: Junio C Hamano <junkio@cox.net>
Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 02:31:06 -07:00
Petr Baudis
2de381f919 [PATCH] Consolidate the error handling
Now there is error() for "library" errors and die() for fatal "application"
errors. usage() is now used strictly only for usage errors.

Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 02:28:48 -07:00
Petr Baudis
bdd4da595a [PATCH] Make nsec checking optional
The nsec field of ctime/mtime is now checked only with -DNSEC defined during
compilation. nsec acts broken since it is stored in the icache but apparently
just gets to zero when flushed to filesystem not supporting it (e.g. ext3),
creating illusions of false changes. At least that's my impression.

Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 02:20:38 -07:00
Petr Baudis
5c2a7fbc36 [PATCH] SHA1 naive collision checking
When compiled with -DCOLLISION_CHECK, we will check against SHA1
collisions when writing to the object database.

From: Christopher Li <chrislgit@chrisli.org>
Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 02:14:06 -07:00
Petr Baudis
7912c07037 [PATCH] ls-tree for listing trees
ls-tree tool provides just a way to export the binary tree objects
to a usable text format. This is bound to be useful in variety
of scripts, although none of those I have currently uses it.
But e.g. the simple script I've sent to HPA for purging the object
database uses it.

Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 02:02:34 -07:00
Petr Baudis
c57a3a91f1 [PATCH] Correct show-diff output for deleted files
My convention is that contrary to files trimmed to zero size,
deleted files always go to /dev/null. This patch turns show-diff
to abide this.

Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 01:46:35 -07:00
Petr Baudis
e2e5e98a40 [PATCH] Silent flag for show-diff
This patch adds a -s flag for show-diff, which will surpress the
actual diffing. This is useful for my scripts when they just want
to see what needs to be updated in the cache.

Signed-off-by: Petr Baudis <pasky@ucw.cz>
2005-04-13 01:40:09 -07:00
Petr Baudis
3d8c7a5790 [PATCH] Fix a crash when doing rev-tree
In parse_commit(), free(buffer) is fed a bogus pointer.

Signed-off-by: Petr Baudis <pasky@ucw.cz>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-12 14:37:42 -07:00
Linus Torvalds
29d76d4b05 Make "checkout-cache" silently skip up-to-date files.
It used to always overwrite them if forced. Now it just
realizes that they are already ok, and don't need to be
touched.
2005-04-12 14:17:28 -07:00
Linus Torvalds
40e88b95cd Make "rev-tree" able to read its own output again from the cache.
Also, add "date" information to the output so that you can do something
like this:

	rev-tree `cat .git/HEAD` | sort -nr | cut -d' ' -f2 | while read i; do cat-file commit $i; done

which basically becomes a "git log" (aka "git changes") where things are
sorted by time.
2005-04-12 13:40:03 -07:00
David Woodhouse
727ff27787 [PATCH] rev-tree support for "in X but not in Y".
To do the automated commit-mailing I need to be able to answer the
question "which commits are here today but weren't yesterday"...  i.e. 
given two commit-ids $HEAD and $YESTERDAY I want to be able to do:

	rev-tree $HEAD ^$YESTERDAY

to list those commits which are in the tree now but weren't
ancestors of yesterday's head.

Yes, I could probably do this with 
	rev-tree $HEAD $YESTERDAY | egrep -v ^[a-z0-9]*:3
but I prefer not to.
2005-04-12 12:35:11 -07:00
Christopher Li
c0fb976aa7 [PATCH] show-diff show deleted files as diff as well.
The ideas is that using the show-diff to generate the
patch including deleted and new file (in the next patch).
So we don't have to do the temp new file diff dance on the
script.

The cache index now contain enough information to generate
the whole patch. So the GIT SCM don't need separate command
for check out file to edit or delete. Just do the edit and
remove and GIT will generate the correct patch.

It still require tell GIT to add new files.
2005-04-12 02:04:44 -07:00
Linus Torvalds
5e76011c0d Remove the annoying "ok" printout from show-diff.
It used to be useful before I wrote "show-files", so that
show-diff would also tell what the cached files were. Now
it's just annoying.
2005-04-12 02:01:12 -07:00
Linus Torvalds
853916ff7f Add "applypatch" and "dotest" scripts to tie it all together.
This should be getting it all pretty close to a working setup.
2005-04-12 01:40:20 -07:00
Linus Torvalds
74b46e32cb Add a "check-files" command, which is useful for scripting
patches.

In particular, it verifies that all the listed files are up-to-date
in the cache (or don't exist and are ready to be added).
2005-04-12 00:23:14 -07:00
Linus Torvalds
2744b2344d Start of early patch applicator tools for git.
I looked a bit at my old BK tools for the same thing, but they were
just so horrid in many ways that I largely rewrote it all and these
tools do things a bit differently. Instead of aggressively piping
data from one process to another (which was clever but very hard
to follow), this first just splits out the mbox into many smaller
email files, and then does some scripts on these temporary files.
2005-04-11 23:46:50 -07:00
Linus Torvalds
8695c8bfe1 Add "show-files" command to show the list of managed (or non-managed) files.
You want things like this to check in a patch..
2005-04-11 18:55:38 -07:00
Linus Torvalds
3607c27f5f Allow zero-sized files to be checked in.
The kernel may not want it, but others probably do.

Noted (again) by Junio Hamano.
2005-04-11 18:02:00 -07:00
Linus Torvalds
771364af0e Make the rev-tree output more regular. This is the last
change. Promise.

It now always outputs all the revisions as <sha1>:<reachability>, where the
reachability is the bitmask of how that revision was reachable from the
commits in the argument list.

Trivially, if there is only one commit, the reachability will always be
(1 << 0) == 1 for all reachable revisions, and there won't be any edges
(so the "--edges" flag only makes sense with multiple commit keys).
2005-04-11 17:40:58 -07:00
Linus Torvalds
28258afe91 Make "rev-tree" capable of showing the difference in reachability between two
or more commit points.

This is important both to know what the difference between two commit
points is, but also to figure out where to try to merge from.
2005-04-11 17:23:58 -07:00
Linus Torvalds
97d9c3cdea Make "rev-tree" more efficient and more useful.
Slight change of output format: it now lists all parents on the same line.

This allows it to work on initial commits too (which have no parents), and
also makes the output format a lot more intuitive.
2005-04-11 16:42:13 -07:00
Linus Torvalds
4bb04f2190 Rename ".dircache" directory to ".git"
I started out calling the tool "dircache". That's clearly moronic.
2005-04-11 15:47:57 -07:00
Linus Torvalds
9614b8dcf8 Fix stale index.lock file removal using "atexit()".
Problem noted by Randy Dunlap.
2005-04-11 15:39:26 -07:00
Linus Torvalds
84fe972055 Add a "rev-tree" helper, which calculates the revision
tree graph.

It's quite fast when the commit-objects are cached, but since
it has to walk every single commit-object, it also allows you
to cache an old state and just add on top of that.
2005-04-11 13:55:10 -07:00
Linus Torvalds
0dcad32ae2 Fix "usage()" to do the missing line termination.
It got broken when I changed it to use stdarg.
2005-04-11 13:53:49 -07:00
Linus Torvalds
32d197f18d Fix "update-cache" not fixing up the size field as appropriate.
The size field isn't in the tree information, so we need to
update it if the sha1 matches.
2005-04-11 11:33:58 -07:00
Linus Torvalds
cfd88e2b7a Make the default directory permissions more lax.
After all, if you want to not allow others to read your
stuff, set your "umask" appropriately or make sure the
parent directories aren't readable/executable.
2005-04-11 10:24:41 -07:00
Linus Torvalds
075b845a85 Add a COPYING notice, making it explicit that the license is GPLv2.
Let's bite the v3 bullet when it comes, although if people want to,
they can just state "or later at discretion of Linus" in their copyright
messages.
2005-04-11 10:18:16 -07:00
Linus Torvalds
711cf3a026 Make "update-cache --refresh" do what it really should do: just
refresh the "stat" information.

We need this after having done a "read-tree", for example, when the
stat information does not match the checked-out tree, and we want to
start getting efficient cache matching against the parts of the tree
that are already up-to-date.
2005-04-11 09:39:21 -07:00
Linus Torvalds
bf16c71e2f Fix up commit-tree/diff-tree user interface issues.
No, this doesn't make them easy to use, but makes diff-tree use
the "-r" flag for "recursive" (not "-R") and makes commit-tree
use AUTHOR_xxx environment flags (not COMMITTER_xxx) to match what
it actually does.
2005-04-11 08:37:17 -07:00
Linus Torvalds
91af81a98e Oops. Fix bad initialization of the "seen" array, causing us to not
properly clear the reference count at init time. It happened to work
for me by pure luck.

Until it broke, and my unreferenced commit suddenly looked referenced
again. Fixed.
2005-04-10 23:33:52 -07:00
Linus Torvalds
f1257f3a33 Oops, the actual 'printf' for missing objects was missing.
Which made fsck very quiet about objects it hadn't found. So add
it. 

We'll need to make things like these optional, because it's
perfectly ok to have partial history if you don't want it,
and don't want to go backwards. But for development, it's best
to always complain about missing sha1 object files that are
referenced from somewhere else.
2005-04-10 23:22:59 -07:00
Linus Torvalds
8ba0bbb237 Add connectivity tracking to fsck.
This shows that I've lost track of one commit already. Most likely
because I forgot to update the .dircache/HEAD file when doing a
commit, so that the next commit referenced not the top-of-tree, but
the one older commit.

Having dangling commits is fine (in fact, you should always have
at least _one_ dangling commit in the top-of-tree). But it's
good to know about them.
2005-04-10 23:13:09 -07:00
Linus Torvalds
76e7f4ec48 Fix off-by-one error in removal of cache entry.
Also make the return value of "cache_name_pos()" be sane: positive
or zero if we found it (it's the index into the cache array), and
"-pos-1" to indicate where it should go if we didn't.
2005-04-10 22:06:50 -07:00
Linus Torvalds
262e82b4a7 Fix diff-tree recursion.
And, perhaps more importantly, fix the fact that if a filename changed from a
directory to a file (or vice versa), we must consider it a delete and an add,
not a "filechange".
2005-04-10 21:49:26 -07:00
Linus Torvalds
eeb7991695 Simplify "diff-tree" output, and only keep track of one single name-base.
During original development I had different name-bases for source and
destination, so that I could make the output show how it got removed 
from "tree a" and added to "tree b", but we don't want that. We only
do recursive diffs on anything where the bases are exactly the same,
so we might as well just work with a single base.

Also, make the output for "changed" be a single line, since people
hated the separate '<' / '>' format. They were right. It sucked.
2005-04-10 15:08:02 -07:00