Commit Graph

4388 Commits

Author SHA1 Message Date
Junio C Hamano
a52139b47e Update write-tree to use cache-tree.
The updated write-tree reads from $GIT_DIR/index.aux to pick up
subtree objects information, updates the cache-tree with the
index, and updates index.aux file after writing a tree out of
the index file.

Until update-index and other programs that modify the index are
updated to maintain index.aux file, the index.aux file written
by the last write-tree will become stale immediately after they
update the index, which will result in the whole tree
recomputation just like the original write-tree.

The idea is to convert those commands to invalidate cache-tree
whenever they touch the index entries, and write updated
index.aux out.  After the index is updated with them, write-tree
will be able to reuse the parts of the cache-tree that have not
been touched.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-23 20:18:57 -07:00
Junio C Hamano
749864627c Add cache-tree.
The cache_tree data structure is to cache tree object names that
would result from the current index file.

The idea is to have an optional file to record each tree object
name that corresponds to a directory path in the cache when we
run write_cache(), and read it back when we run read_cache().
During various index manupulations, we selectively invalidate
the parts so that the next write-tree can bypass regenerating
tree objects for unchanged parts of the directory hierarchy.

We could perhaps make the cache-tree data an optional part of
the index file, but that would involve the index format updates,
so unless we need it for performance reasons, the current plan
is to use a separate file, $GIT_DIR/index.aux to store this
information and link it with the index file with the checksum
that is already used for index file integrity check.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-23 20:18:16 -07:00
Junio C Hamano
8b7257514b Merge branch 'ar/chmod-series' into next
* ar/chmod-series:
  make update-index --chmod work with multiple files and --stdin
2006-04-23 17:00:31 -07:00
Junio C Hamano
1af1c2b63d read-cache/write-cache: optionally return cache checksum SHA1.
read_cache_1() and write_cache_1() takes an extra parameter
*sha1 that returns the checksum of the index file when non-NULL.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-23 16:57:40 -07:00
Paul Mackerras
61e56c8823 gitk: Let git-rev-list do the argument list parsing
This is a fix for a problem reported by Jim Radford where an argument
list somewhere overflows on repositories with lots of tags.  In fact
it's now unnecessary to use git-rev-parse since git-rev-list can take
all the arguments that git-rev-parse can.  This is inspired by but not
the same as the solutions suggested by Jim Radford and Linus Torvalds.

Signed-off-by: Paul Mackerras <paulus@samba.org>
2006-04-23 18:00:24 +10:00
Alex Riesen
227bdb186f make update-index --chmod work with multiple files and --stdin
The patch makes "--chmod=-x" and "--chmod=+x" act like "--add"
and "--remove" to affect the behaviour of the command for the
rest of the path parameters, not just the following one.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-23 00:47:03 -07:00
Junio C Hamano
623ac4c896 Merge branch 'jc/diff' into next
* jc/diff:
  Libified diff-index: backward compatibility fix.
2006-04-22 04:04:46 -07:00
Junio C Hamano
5c21ac0e7c Libified diff-index: backward compatibility fix.
"diff-index -m" does not mean "do not ignore merges", but means
"pretend missing files match the index".

The previous round tried to address this, but failed because
setup_revisions() ate "-m" flag before the caller had a chance
to intervene.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-22 04:03:32 -07:00
Junio C Hamano
0bc6c14058 Merge branch 'jc/diff' into next
* jc/diff:
  Libify diff-index.
  Libify diff-files.
2006-04-22 03:07:08 -07:00
Junio C Hamano
f1f114d080 Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  git-fmt-patch: thinkofix to show [PATCH] properly.
2006-04-22 03:06:58 -07:00
Junio C Hamano
53f420ef00 git-fmt-patch: thinkofix to show [PATCH] properly.
Updating "subject" variable without changing the hardcoded
number of bytes to memcpy from it would not help much.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-22 03:06:13 -07:00
Junio C Hamano
e09ad6e1e3 Libify diff-index.
The second installment to libify diff brothers.  The pathname
arguments are checked more strictly than before because we now
use the revision.c::setup_revisions() infrastructure.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-22 02:43:00 -07:00
Junio C Hamano
6973dcaee7 Libify diff-files.
This is the first installment to libify diff brothers.

The updated diff-files uses revision.c::setup_revisions()
infrastructure to parse its command line arguments, which means
the pathname arguments are checked more strictly than before.
The tests are adjusted to separate possibly missing paths from
the rest of arguments with double-dashes, to show the kosher
way.

As Linus pointed out, renaming diff.c to diff-lib.c was simply
stupid, so I am renaming it back.  The new diff-lib.c is to
contain pieces extracted from diff brothers.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-22 02:37:45 -07:00
Junio C Hamano
1cc4764bc1 Merge branch 'jc/cc-stat' into next
* jc/cc-stat:
  Fix "git show --stat"
2006-04-22 01:46:29 -07:00
Junio C Hamano
076d1d6adc Merge branch 'jc/color' into next
* jc/color:
  Add colordiff for git to contrib/colordiff.
  Makefile: dependency for builtin-help.o
2006-04-21 22:25:16 -07:00
Junio C Hamano
96ab4f4e7a Fix "git show --stat"
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-21 22:24:34 -07:00
Junio C Hamano
96afa0764e Add colordiff for git to contrib/colordiff.
I hacked it up to teach it the git extended diff headers, made
it not to read the whole patch in the array.

Also, the original program, when arguments are given, ran "diff"
with the given arguments and showed the output from it.  Of
course, I changed it to run "git diff" ;-).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-21 22:24:30 -07:00
Junio C Hamano
e64961b057 Merge branch 'jc/diff'
* jc/diff:
  diff --stat: do not drop rename information.
2006-04-21 22:03:07 -07:00
Junio C Hamano
08df61713c Makefile: dependency for builtin-help.o
builtin-help.c wants to include common-cmds.h which is a
generated file.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-21 21:56:31 -07:00
Junio C Hamano
6082c4433b Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  Split up builtin commands into separate files from git.c
  git-log produces no output
2006-04-21 13:32:58 -07:00
Junio C Hamano
91efcf6065 Merge branch 'master' into jc/fmt-patch
* master:
  Split up builtin commands into separate files from git.c
  git-log produces no output
  fix pack-object buffer size
  mailinfo: decode underscore used in "Q" encoding properly.
  Reintroduce svn pools to solve the memory leak.
  pack-objects: do not stop at object that is "too small"
  git-commit --amend: two fixes.
  get_tree_entry(): make it available from tree-walk
  sha1_name.c: no need to include diff.h; tree-walk.h will do.
  sha1_name.c: prepare to make get_tree_entry() reusable from others.
  get_sha1() shorthands for blob/tree objects
  pre-commit hook: complain about conflict markers.
  git-merge: a bit more readable user guidance.
  diff: move diff.c to diff-lib.c to make room.
  git log: don't do merge diffs by default
  Allow "git repack" users to specify repacking window/depth
  Document git-clone --reference
  Fix filename scaling for binary files
  Fix uninteresting tags in new revision parsing

Conflicts:

    Adjusted the addition of fmt-patch to match the recent split
    from git.c to builtin.log.c.
2006-04-21 13:25:47 -07:00
Linus Torvalds
70827b15bf Split up builtin commands into separate files from git.c
Right now it split it into "builtin-log.c" for log-related commands
("log", "show" and "whatchanged"), and "builtin-help.c" for the
informational commands (usage printing and "help" and "version").

This just makes things easier to read, I find.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-21 13:14:41 -07:00
Junio C Hamano
285755127a Merge branch 'fix'
* fix:
  git-log produces no output
2006-04-21 13:14:30 -07:00
Linus Torvalds
34fd1c9ac5 git-log produces no output
When $PAGER is set to 'less -i', we used to fail because we
assumed the $PAGER is a command and simply exec'ed it.

Try exec first, and then run it through shell if it fails.  This
allows even funkier PAGERs like these ;-):

	PAGER='sed -e "s/^/`date`: /" | more'
	PAGER='contrib/colordiff.perl | less -RS'

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-21 13:00:10 -07:00
Junio C Hamano
d1e36c796d Merge branch 'master' into next
* master:
  fix pack-object buffer size
  mailinfo: decode underscore used in "Q" encoding properly.
  Reintroduce svn pools to solve the memory leak.
  pack-objects: do not stop at object that is "too small"
2006-04-21 00:45:55 -07:00
Junio C Hamano
3c144afe50 Merge branch 'fix'
* fix:
  fix pack-object buffer size
  mailinfo: decode underscore used in "Q" encoding properly.
  Reintroduce svn pools to solve the memory leak.
  pack-objects: do not stop at object that is "too small"
2006-04-21 00:45:40 -07:00
Nicolas Pitre
0dec30b978 fix pack-object buffer size
The input line has 40 _chars_ of sha1 and no 20 _bytes_. It should also
account for the space before the pathname, and the terminating \n and \0.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-21 00:45:10 -07:00
Junio C Hamano
757319309a mailinfo: decode underscore used in "Q" encoding properly.
Quoted-Printable (RFC 2045) and the "Q" encoding (RFC 2047) are
subtly different; the latter is used on the mail header and an
underscore needs to be decoded to 0x20.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-21 00:09:28 -07:00
Santi_Béjar
d598075e52 Reintroduce svn pools to solve the memory leak.
Introduced in 4802426.

Signed-off-by: Santi Béjar <sbejar@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-20 23:41:24 -07:00
Junio C Hamano
f527cb8c38 pack-objects: do not stop at object that is "too small"
Because we sort the delta window by name-hash and then size,
hitting an object that is too small to consider as a delta base
for the current object does not mean we do not have better
candidate in the window beyond it.

Noticed by Shawn Pearce, analyzed by Nico, Linus and me.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-20 23:36:22 -07:00
Junio C Hamano
3155ef8a4a Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  rename internal format-patch wip
2006-04-20 12:45:16 -07:00
Junio C Hamano
43885c2a55 rename internal format-patch wip
Otherwise "git format-patch" would invoke unfinished internal one that
does only --stdout

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-20 12:45:02 -07:00
Junio C Hamano
56c155aa9f Merge branch 'master' into next
* master:
  git-commit --amend: two fixes.
2006-04-20 02:53:03 -07:00
Junio C Hamano
0080f50eb3 Merge branch 'fix'
* fix:
  git-commit --amend: two fixes.
2006-04-20 02:52:04 -07:00
Junio C Hamano
6a74642c50 git-commit --amend: two fixes.
When running "git commit --amend" only to fix the commit log
message without any content change, we mistakenly showed the
git-status output that says "nothing to commit" without
commenting it out.

If you have already run update-index but you want to amend the
top commit, "git commit --amend --only" without any paths should
have worked, because --only means "starting from the base
commit, update-index these paths only to prepare the index to
commit, and perform the commit".  However, we refused -o without
paths.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-20 02:51:12 -07:00
Junio C Hamano
adeb25cf04 Stop carrying Geert's similarity estimator.
I tried the code with pack-objects.c::try_delta(), and was
somewhat dissapointed.  The current type-path based heuristics
already limits the delta attempts to similar objects anyway, so
it is not a good place to apply it.

The Net never forgets, so we can resurrect it if we wanted to
later.
2006-04-20 00:37:08 -07:00
Junio C Hamano
f31613d45a Merge branch 'jc/unresolve' into next
* jc/unresolve:
  git-update-index --unresolve
2006-04-19 23:52:30 -07:00
Junio C Hamano
2bd452d3b9 git-update-index --unresolve
Retire git-unresolve and make it into "git-update-index --unresolve".
It processes all paths that follow.

During a merge, you would mark a path that is dealt with with:

	$ git update-index hello

and you would "undo" it with:

	$ git update-index --unresolve hello

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 23:52:05 -07:00
Junio C Hamano
c95fa67fd8 Merge branch 'jc/diff' into next
* jc/diff:
  diff --stat: do not drop rename information.
2006-04-19 23:22:40 -07:00
Junio C Hamano
44aad15f0d diff --stat: do not drop rename information.
When a verbatim rename or copy is detected, we did not show
anything on the "diff --stat" for the filepair.  This makes it
to show the rename information.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 23:22:19 -07:00
Junio C Hamano
55436162c7 Merge branch 'jc/fmt-patch' into next
* jc/fmt-patch:
  Minor tweak on subject line in --pretty=email
2006-04-19 20:04:09 -07:00
Junio C Hamano
60571f75ab Merge branch 'jc/unresolve' into next
* jc/unresolve:
  Add git-unresolve <paths>...
  get_tree_entry(): make it available from tree-walk
  sha1_name.c: no need to include diff.h; tree-walk.h will do.
  sha1_name.c: prepare to make get_tree_entry() reusable from others.
  pre-commit hook: complain about conflict markers.
  git-merge: a bit more readable user guidance.
  diff: move diff.c to diff-lib.c to make room.
  git log: don't do merge diffs by default
  Allow "git repack" users to specify repacking window/depth
2006-04-19 16:12:57 -07:00
Junio C Hamano
ec167793d8 Add git-unresolve <paths>...
This is an attempt to address the issue raised on #git channel
recently by Carl Worth.

After a conflicted automerge, "git diff" shows a combined diff
to give you how the tentative automerge result differs from
what came from each branch.  During a complex merge, it is
tempting to be able to resolve a few paths at a time, mark
them "I've dealt with them" with git-update-index to unclutter
the next "git diff" output, and keep going.  However, when the
final result does not compile or otherwise found to be a
mismerge, the workflow to fix the mismerged paths suddenly
changes to "git diff HEAD -- path" (to get a diff from our
HEAD before merging) and "git diff MERGE_HEAD -- path" (to get
a diff from theirs), and it cannot show the combined anymore.

With git-unresolve <paths>..., the versions from our branch and
their branch for specified blobs are placed in stage #2 and
stage #3, without touching the working tree files.  This gives
you the combined diff back for easier review, along with
"diff --ours" and "diff --theirs".

One thing it does not do is to place the base in stage #1; this
means "diff --base" would behave differently between the run
immediately after a conflicted three-way merge, and the run
after an update-index by mistake followed by a git-unresolve.

We could theoretically run merge-base between HEAD and
MERGE_HEAD to find which tree to place in stage #1, but
reviewing "diff --base" is not that useful so....

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 16:12:41 -07:00
Junio C Hamano
a4d0cced53 Merge branch 'lt/xsha1'
* lt/xsha1:
  get_tree_entry(): make it available from tree-walk
  sha1_name.c: no need to include diff.h; tree-walk.h will do.
  sha1_name.c: prepare to make get_tree_entry() reusable from others.
  get_sha1() shorthands for blob/tree objects
2006-04-19 15:57:45 -07:00
Junio C Hamano
b8950769b8 Merge branch 'maint'
* maint:
  pre-commit hook: complain about conflict markers.
  git-merge: a bit more readable user guidance.
2006-04-19 15:41:55 -07:00
Junio C Hamano
ba580aeafb diff: move diff.c to diff-lib.c to make room.
Now I am not doing any real "git-diff in C" yet, but this would
help before doing so.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 15:38:14 -07:00
Junio C Hamano
61c2bcbd11 pre-commit hook: complain about conflict markers.
Several <<< or === or >>> characters at the beginning of a line
is very likely to be leftover conflict markers from a failed
automerge the user resolved incorrectly, so detect them.

As usual, this can be defeated with "git commit --no-verify" if
you really do want to have those files, just like changes that
introduce trailing whitespaces.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 15:37:40 -07:00
Junio C Hamano
50ac740801 git-merge: a bit more readable user guidance.
We said "fix up by hand" after failed automerge, which was a big
"Huh?  Now what?".  Be a bit more explicit without being too
verbose. Suggested by Carl Worth.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 15:37:36 -07:00
Junio C Hamano
4c4b158b8f Minor tweak on subject line in --pretty=email
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 15:16:08 -07:00
Junio C Hamano
4dcff634e6 get_tree_entry(): make it available from tree-walk
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-19 14:05:47 -07:00