Commit graph

51902 commits

Author SHA1 Message Date
Junio C Hamano 8f41523fc1 [PATCH] show-diff.c: do not include unused header file
This is my bad.  I added #include <ctype.h> to the file,
which I ended up not using and failed to remove it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-17 09:53:35 -07:00
Linus Torvalds e44794706e Be much more liberal about the file mode bits.
We only really care about the difference between a file being executable
or not (by its owner). Everything else we leave for the user umask to
decide.
2005-04-16 22:26:31 -07:00
Junio C Hamano 9fec8b26ef [PATCH] Do not run useless show-diff on unmerged paths repeatedly.
When run on unmerged dircache, show-diff compares the working
file with each non-empty stage for that path.  Two out of three
times, this is not very helpful.  This patch makes it report the
unmergedness only once per each path and avoids running the
actual diff.

Upper layer SCMs like Cogito are expected to find out mode/SHA1
for each stage by using "show-files --stage" and run the diff
itself.  This would result in more sensible diffs.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-16 21:29:45 -07:00
Junio C Hamano d2522a6528 [PATCH] show-diff style fix.
This fixes some stylistic problems introduced by my previous set
of patches.  I'll be sending my last patch to show-diff next,
which depends on this cleanup.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-16 21:29:45 -07:00
Junio C Hamano b70c8942d3 [PATCH] Rename confusing variable in show-diff
The show-diff command uses a variable "new" but it is always
used to point at the original data recorded in the dircache
before the user started editing in the working file.  Rename it
to "old" to avoid confusion.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-16 21:29:45 -07:00
Junio C Hamano 9bd94cafdf [PATCH] show-diff shell safety
The command line for running "diff" command is built without
taking shell metacharacters into account.  A malicious dircache
entry "foo 2>bar" (yes, a filename with space) would result in
creating a file called "bar" with the error message "diff: foo:
No such file or directory" in it.

This is not just a user screwing over himself.  Such a dircache
can be created as a result of a merge with tree from others.

Here is a fix.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-16 21:29:45 -07:00
Junio C Hamano d94c6128e6 [PATCH] show-diff -z option for machine readable output.
This patch adds the -z option to the show-diff command,
primarily for use by scripts.  The information emitted is
similar to that of -q option, but in a more machine readable
form.  Records are terminated with NUL instead of LF, so that
the scripts can deal with pathnames with embedded newlines.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-16 21:29:45 -07:00
Junio C Hamano b8f80925e3 [PATCH] Optionally tell show-diff to show only named files
SCMs have ways to say "I want diff only this particular file",
or "I want diff files under this directory".  This patch teaches
show-diff to do something similar.  Without command line
arguments, it still examines everything in the dircache as
before.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-16 21:29:45 -07:00
Junio C Hamano 0f2303f719 [PATCH] Un unoptimize ls-tree behaviour
ls-tree unconditionally called read_sha1_file() for all paths
even when not needed, which was a mistake introduced by me.
Rectify this by first checking S_ISDIR(mode) and read the tree
contents only when it is a tree and we are recursive.  There is
no need to read it in any other cases.

The patch also removes the confusing comment that led to this
incorrect implementation.

Thanks to Peter Baudis for noticing this problem.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-16 13:57:39 -07:00
Linus Torvalds eec8c633c1 Add "--unmerged" flag to "show-files", which does what the name implies.
The flag also implies "--stage", since unmerged file information doesn't
make sense without the full output.
2005-04-16 12:43:32 -07:00
Linus Torvalds 2fbdd13174 Remove "merge-tree.c"
It's there in the history if somebody wants to resurrect it, but it
seems to have been successfully superceded by the new and improved
index-merge thing, where we do all merging entirely in the index.
2005-04-16 12:24:12 -07:00
Linus Torvalds 7b937ca331 When inserting a index entry of stage 0, remove all old unmerged entries.
This allows you to actually tell git that you've resolved a conflict.
2005-04-16 12:05:45 -07:00
Linus Torvalds 43f91266a4 Make 'read-tree' do a few more of the trivial merge cases.
This cuts down the work for the "real merge" to stuff where
people might actually disagree on the algorithm. The trivial
cases would seem to be totally independent of any policy.
2005-04-16 09:11:49 -07:00
Junio C Hamano aee461985f [PATCH] Add --stage to show-files for new stage dircache.
This adds --stage option to show-files command.  It shows
file-mode, SHA1, stage and pathname.  Record separator follows
the usual convention of -z option as before.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-16 08:33:23 -07:00
Junio C Hamano fcf712e60e [PATCH] Byteorder fix for read-tree, new -m semantics version.
The ce_namelen field has been renamed to ce_flags and split into
the top 2-bit unused, next 2-bit stage number and the lowest
12-bit name-length, stored in the network byte order.  A new
macro create_ce_flags() is defined to synthesize this value from
length and stage, but it forgets to turn the value into the
network byte order.  Here is a fix.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-16 08:30:20 -07:00
Linus Torvalds d99082e0e3 Make "read-tree" merge the trees it reads by giving them consecutive states.
Normally you'd use state 0 for the "merged" state, and start out with
state 1 being "origin", state 2 being "first tree" and state 3 being
"second tree".

Once all the index entries are back in state 0, we have a successful
merge and can write the result tree back.
2005-04-15 22:53:45 -07:00
Linus Torvalds 95fd5bf82a Make cache entry comparison take the new "state" flag into account.
This is what allows us to have multiple states of the same file in
the index, and what makes it always sort correctly.
2005-04-15 22:51:44 -07:00
Linus Torvalds c347ea5d6f write-tree: refuse to write out trees with unmerged index entries.
Of course, we can't even generate such an index yet, but give me
some time. This is a cunning plan. Let's see if it actually works.

(I feel like Wile E Coyote, waiting for the big rock to fall).
2005-04-15 22:04:54 -07:00
Linus Torvalds f5cabd13d8 Encode a few extra flags per index entry.
This will allow us to have the same name in different "states" in the
index at the same time. Which in turn seems to be a very simple way to
merge.
2005-04-15 21:45:38 -07:00
Linus Torvalds 13e897e580 Simplify show-diff cache entry name handling.
The cache-entry names are all proper strings, no need to worry about
their length.
2005-04-15 21:42:34 -07:00
Junio C Hamano d07f651c25 [PATCH] Add '-z' to merge-tree.c
This adds '-z' to merge-tree and changes its default line termination to
LF to make it consistent with your other recent changes. 

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-15 19:20:42 -07:00
Linus Torvalds 6cbd72f8d5 Make "diff-tree" have similar behaviour as "ls-tree" wrt line termination.
Default to the human-readable '\n', but make the scriptable "-z" flag
do the old '\0' behaviour.
2005-04-15 15:11:57 -07:00
Junio C Hamano ca2a079865 [PATCH] Add "-q" option to show-diff.c
This adds the '-q' option for show-diff.c to squelch complaints for
missing files.

It is handy if you want to run it in the merge temporary directory after
running merge-trees with its minimum checkout mode, which is the
default, because you would not find any files other than the ones that
needs human validation after the merge there. 

It also fixes the argument parsing bug Paul Mackerras noticed in
<16991.42305.118284.139777@cargo.ozlabs.ibm.com> but slightly
differently.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-15 15:08:09 -07:00
Junio C Hamano b83c83457e [PATCH] Add -z option to show-files
This adds NUL-terminated output (-z) to show-files.  This is necessary
for merge-trees script to deal with filenames with embedded newlines.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-15 11:11:01 -07:00
Linus Torvalds 9945d98051 Add "--cacheinfo" option to update-cache.
This allows scripts to manually add entries to the cache explicitly.

Need to do some way to remove them too, even if the path exists.
2005-04-15 11:08:33 -07:00
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