1
0
mirror of https://github.com/git/git.git synced 2024-10-02 10:01:24 +02:00
Commit Graph

3838 Commits

Author SHA1 Message Date
Linus Torvalds
3443546f6e Use a *real* built-in diff generator
This uses a simplified libxdiff setup to generate unified diffs _without_
doing  fork/execve of GNU "diff".

This has several huge advantages, for example:

Before:

	[torvalds@g5 linux]$ time git diff v2.6.16.. > /dev/null

	real    0m24.818s
	user    0m13.332s
	sys     0m8.664s

After:

	[torvalds@g5 linux]$ time git diff v2.6.16.. > /dev/null

	real    0m4.563s
	user    0m2.944s
	sys     0m1.580s

and the fact that this should be a lot more portable (ie we can ignore all
the issues with doing fork/execve under Windows).

Perhaps even more importantly, this allows us to do diffs without actually
ever writing out the git file contents to a temporary file (and without
any of the shell quoting issues on filenames etc etc).

NOTE! THIS PATCH DOES NOT DO THAT OPTIMIZATION YET! I was lazy, and the
current "diff-core" code actually will always write the temp-files,
because it used to be something that you simply had to do. So this current
one actually writes a temp-file like before, and then reads it into memory
again just to do the diff. Stupid.

But if this basic infrastructure is accepted, we can start switching over
diff-core to not write temp-files, which should speed things up even
further, especially when doing big tree-to-tree diffs.

Now, in the interest of full disclosure, I should also point out a few
downsides:

 - the libxdiff algorithm is different, and I bet GNU diff has gotten a
   lot more testing. And the thing is, generating a diff is not an exact
   science - you can get two different diffs (and you will), and they can
   both be perfectly valid. So it's not possible to "validate" the
   libxdiff output by just comparing it against GNU diff.

 - GNU diff does some nice eye-candy, like trying to figure out what the
   last function was, and adding that information to the "@@ .." line.
   libxdiff doesn't do that.

 - The libxdiff thing has some known deficiencies. In particular, it gets
   the "\No newline at end of file" case wrong. So this is currently for
   the experimental branch only. I hope Davide will help fix it.

That said, I think the huge performance advantage, and the fact that it
integrates better is definitely worth it. But it should go into a
development branch at least due to the missing newline issue.

Technical note: this is based on libxdiff-0.17, but I did some surgery to
get rid of the extraneous fat - stuff that git doesn't need, and seriously
cutting down on mmfile_t, which had much more capabilities than the diff
algorithm either needed or used. In this version, "mmfile_t" is just a
trivial <pointer,length> tuple.

That said, I tried to keep the differences to simple removals, so that you
can do a diff between this and the libxdiff origin, and you'll basically
see just things getting deleted. Even the mmfile_t simplifications are
left in a state where the diffs should be readable.

Apologies to Davide, whom I'd love to get feedback on this all from (I
wrote my own "fill_mmfile()" for the new simpler mmfile_t format: the old
complex format had a helper function for that, but I did my surgery with
the goal in mind that eventually we _should_ just do

	mmfile_t mf;

	buf = read_sha1_file(sha1, type, &size);
	mf->ptr = buf;
	mf->size = size;
	.. use "mf" directly ..

which was really a nightmare with the old "helpful" mmfile_t, and really
is that easy with the new cut-down interfaces).

[ Btw, as any hawk-eye can see from the diff, this was actually generated
  with itself, so it is "self-hosting". That's about all the testing it
  has gotten, along with the above kernel diff, which eye-balls correctly,
  but shows the newline issue when you double-check it with "git-apply" ]

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-25 16:49:58 -08:00
Linus Torvalds
c150462824 git-apply: safety fixes
This was triggered by me testing the "@@" numbering shorthand by GNU
patch, which not only showed that git-apply thought it meant the number
was duplicated (when it means that the second number is 1), but my tests
showed than when git-apply mis-understood the number, it would then not
raise an alarm about it if the patch ended early.

Now, this doesn't actually _matter_, since with a three-line context, the
only case that "x,1" will be shorthanded to "x" is when x itself is 1 (in
which case git-apply got it right), but the fact that git-apply would also
silently accept truncated patches was a missed opportunity for additional
sanity-checking.

So make git-apply refuse to look at a patch fragment that ends early.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-25 16:34:05 -08:00
Jon Loeliger
6a1640ffc6 Removed bogus "<snap>" identifier.
Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-24 22:24:06 -08:00
Jon Loeliger
6250ad1e7a Clarify and expand some hook documentation.
Clarify update and post-update hooks.
Made a few references to the hooks documentation.

Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-24 22:24:02 -08:00
Junio C Hamano
7561d9f544 commit-tree: check return value from write_sha1_file()
... found by Matthias Kestenholz.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-24 22:23:25 -08:00
Junio C Hamano
79f558a5fc Merge branch 'jc/cvsimport'
* jc/cvsimport:
  cvsimport: fix reading from rev-parse
  cvsimport: honor -i and non -i upon subsequent imports
2006-03-23 23:49:07 -08:00
Junio C Hamano
bdaa085f8c Merge branch 'jc/pull'
* jc/pull:
  git-pull: reword "impossible to fast-forward" message.
  git-pull: further safety while on tracking branch.
2006-03-23 23:47:32 -08:00
Junio C Hamano
9bc8b776c5 Merge branch 'jc/fetch'
* jc/fetch:
  fetch: exit non-zero when fast-forward check fails.
2006-03-23 23:46:06 -08:00
Junio C Hamano
8a8e623514 send-email: Identify author at the top when sending e-mail
git-send-email did not check if the sender is the same as the
patch author.  Follow the "From: at the beginning" convention to
propagate the patch author correctly.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-23 23:43:52 -08:00
Francis Daly
b0d08a504b Format tweaks for asciidoc.
Some documentation "options" were followed by independent preformatted
paragraphs. Now they are associated plain text paragraphs. The
difference is clear in the generated html.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-22 11:06:19 -08:00
Junio C Hamano
8323124afe git-pull: reword "impossible to fast-forward" message.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-22 01:57:11 -08:00
Junio C Hamano
cf46e7b899 git-pull: further safety while on tracking branch.
Running 'git pull' while on the tracking branch has a built-in
safety valve to fast-forward the index and working tree to match
the branch head, but it errs on the safe side too cautiously.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-22 01:09:43 -08:00
Junio C Hamano
3103cf9e1e git-apply: do not barf when updating an originally empty file.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-22 00:21:07 -08:00
Junio C Hamano
8c9e7947c2 http-push.c: squelch C90 warnings.
If you write code after declarations in a block, gcc scolds you
with "warning: ISO C90 forbids mixed declarations and code".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-21 15:50:18 -08:00
Luck, Tony
2928390774 fix field width/precision warnings in blame.c
Using "size_t" values for printf field width/precision upsets gcc, it
wants to see an "int".

Signed-off-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-21 15:39:44 -08:00
Eric Wong
ac74905064 contrib/git-svn: allow rebuild to work on non-linear remote heads
Because committing back to an SVN repository from different
machines can result in different lineages, two different
repositories running git-svn can result in different commit
SHA1s (but of the same tree).  Sometimes trees that are tracked
independently are merged together (usually via children),
resulting in non-unique git-svn-id: lines in rev-list.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-20 23:31:19 -08:00
Nick Hengeveld
a3c57c9adb http-push: don't assume char is signed
Declare remote_dir_exists[] as signed char to be sure that values of -1
are valid.

Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-20 14:38:58 -08:00
Nick Hengeveld
3dfaf7bcfd http-push: add support for deleting remote branches
Processes new command-line arguments -d and -D to remove a remote branch
if the following conditions are met:
- one branch name is present on the command line
- the specified branch name matches exactly one remote branch name
- the remote HEAD is a symref
- the specified branch is not the remote HEAD
- the remote HEAD resolves to an object that exists locally (-d only)
- the specified branch resolves to an object that exists locally (-d only)
- the specified branch is an ancestor of the remote HEAD (-d only)

Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-20 14:38:47 -08:00
Yasushi SHOJI
1fa7a68f4b Be verbose when !initial commit
verbose option in git-commit.sh lead us to run git-diff-index, which
needs a commit-ish we are making diff against.  When we are commiting
the fist set, we obviously don't have any commit-ish in the repo.  So
we just skip the git-diff-index run.

It might be possible to produce diff against empty but do we need
that?

Signed-off-by: Yasushi SHOJI <yashi@atmark-techno.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-20 14:37:59 -08:00
Francis Daly
3070b603ab Fix multi-paragraph list items in OPTIONS section
This patch makes the html docs right, makes the asciidoc docs a bit odd
but consistent with what is there already, and makes the manpages look
OK using docbook-xsl 1.68, but miss a paragraph separator when using 1.69.

For the manpages, current is like

       -A <author_file>
              Read a file with lines on the form

              username = User's Full Name <email@addr.es>

              and use "User's Full Name <email@addr.es>" as the GIT

With this patch, docbook-xsl v1.68 looks like

       -A <author_file>
              Read a file with lines on the form

                      username = User's Full Name <email@addr.es>

              and use "User's Full Name <email@addr.es>" as the GIT author and

while docbook-xsl v1.69 becomes

       -A <author_file>
              Read a file with lines on the form

                        username = User's Full Name <email@addr.es>
              and use "User's Full Name <email@addr.es>" as the GIT author and

The extra indentation is to keep the v1.69 manpage looking sane.
2006-03-20 14:37:33 -08:00
Junio C Hamano
bb52807916 http-fetch: nicer warning for a server with unreliable 404 status
When a repository otherwise properly prepared is served by a
dumb HTTP server that sends "No such page" output with 200
status for human consumption to a request for a page that does
not exist, the users will get an alarming "File X corrupt" error
message.  Hint that they might be dealing with such a server at
the end and suggest running fsck-objects to check if the result
is OK (the pack-fallback code does the right thing in this case
so unless a loose object file was actually corrupt the result
should check OK).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-20 14:07:59 -08:00
Junio C Hamano
fd662dd500 generate-cmdlist: style cleanups.
Instead of giving multiple commands concatenated with semicolon
to sed, write them on separate lines.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-19 23:54:45 -08:00
Shawn Pearce
ad52e7708d Add missing semicolon to sed command.
generate-cmdlist.sh is giving errors messages from sed on Mac OS
10.4 due to a missing semicolon.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-19 16:38:24 -08:00
Junio C Hamano
67686d9504 unpack_delta_entry(): reduce memory footprint.
Currently we unpack the delta data from the pack and then unpack
the base object to apply that delta data to it.  When getting an
object that is deeply deltified, we can reduce memory footprint
by unpacking the base object first and then unpacking the delta
data, because we will need to keep at most one delta data in
memory that way.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-19 13:43:42 -08:00
Alexandre Julliard
2b1c0ef2e5 git.el: Added a function to diff against the other heads in a merge.
git-diff-file-merge-head generates a diff against the first merge
head, or with a prefix argument against the nth head. Bound to `d h'
by default.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-19 12:30:14 -08:00
Alexandre Julliard
75a8180d4b git.el: Get the default user name and email from the repository config.
If user name or email are not set explicitly, get them from the
user.name and user.email configuration values before falling back to
the Emacs defaults.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-19 12:30:07 -08:00
Alexandre Julliard
9de83169d3 git.el: More robust handling of subprocess errors when returning strings.
Make sure that functions that call a git process and return a string
always return nil when the subprocess failed.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-19 12:30:01 -08:00
Fredrik Kuivinen
f81e7c626f Makefile: Add TAGS and tags targets
Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-18 14:01:46 -08:00
Alexandre Julliard
451d7b47f1 ls-files: Don't require exclude files to end with a newline.
Without this patch, the last line of an exclude file is silently
ignored if it doesn't end with a newline.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-18 14:01:37 -08:00
Junio C Hamano
f5ef535ff5 git-pull: run repo-config with dash form.
... as discussed on the list for consistency.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-18 02:07:59 -08:00
Junio C Hamano
cb9594e28c cvsimport: fix reading from rev-parse
The updated code reads the tip of the current branch before and
after the import runs, but forgot to chomp what we read from the
command.  The read-tree command did not them with the trailing
LF.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-18 02:05:02 -08:00
Junio C Hamano
8a414ad50c Merge branch 'jc/empty'
* jc/empty:
  revision traversal: --remove-empty fix (take #2).
  revision traversal: --remove-empty fix.

Conflicts:

	revision.c (adjust for the updates by Fredrik)
2006-03-18 00:43:47 -08:00
Nicolas Pitre
5a1fb2ca92 3% tighter packs for free
This patch makes for 3.4% smaller pack with the git repository, and
a bit more than 3% smaller pack with the kernel repository.

And so with _no_ measurable CPU difference.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 20:42:39 -08:00
Jon Loeliger
71bb10336f Rewrite synopsis to clarify the two primary uses of git-checkout.
Fix a few typo/grammar problems.

Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 20:42:38 -08:00
Jon Loeliger
beb8e13437 Fix minor typo.
Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 20:42:36 -08:00
Jon Loeliger
5bfc4f23bc Reference git-commit-tree for env vars.
Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 20:42:35 -08:00
Jon Loeliger
228382aee4 Clarify git-rebase example commands.
Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 20:42:33 -08:00
Jon Loeliger
81ea3ce2ac Document the default source of template files.
Also explain a bit more about how the template option works.

Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 20:42:31 -08:00
Jon Loeliger
dd1811199e Call out the two different uses of git-branch and fix a typo.
Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 20:42:30 -08:00
Jon Loeliger
55258b5c20 Add git-show reference
Signed-off-by: Jon Loeliger <jdl@jdl.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 20:42:28 -08:00
Junio C Hamano
a9698bb22f fetch: exit non-zero when fast-forward check fails.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 14:10:36 -08:00
Junio C Hamano
8a5f2eac52 cvsimport: honor -i and non -i upon subsequent imports
Documentation says -i is "import only", so without it,
subsequent import should update the current branch and working
tree files in a sensible way.

"A sensible way" defined by this commit is "act as if it is a
git pull from foreign repository which happens to be CVS not
git".  So:

 - If importing into the current branch (note that cvsimport
   requires the tracking branch is pristine -- you checked out
   the tracking branch but it is your responsibility not to make
   your own commits there), fast forward the branch head and
   match the index and working tree using two-way merge, just
   like "git pull" does.

 - If importing into a separate tracking branch, update that
   branch head, and merge it into your current branch, again,
   just like "git pull" does.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 14:10:16 -08:00
Fredrik Kuivinen
53dc463627 blame: Fix git-blame <directory>
Before this patch git-blame <directory> gave non-sensible output. (It
assigned blame to some random file in <directory>) Abort with an error
message instead.

Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 14:09:18 -08:00
Fredrik Kuivinen
88a8b79556 blame: Nicer output
As pointed out by Junio, it may be dangerous to cut off people's names
after 15 bytes. If the name is encoded in an encoding which uses more
than one byte per code point we may end up with outputting garbage.
Instead of trying to do something smart, just output the entire name.
We don't gain much screen space by chopping it off anyway.

Furthermore, only output the file name if we actually found any
renames.

Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-17 14:09:10 -08:00
Randal L. Schwartz
6169858d19 fix imap-send for OSX
This patch works... I've been using it to stay current.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-15 16:14:54 -08:00
Mark Hollomon
c8e2db00f9 Let merge set the default strategy.
If the user does not set a merge strategy for git-pull,
let git-merge calculate a default strategy.

[jc: with minor stylistic tweaks]

Signed-off-by: Mark Hollomon <markhollomon@comcast.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-15 16:14:33 -08:00
Nick Hengeveld
c982647310 Fix broken slot reuse when fetching alternates
When fetching alternates, http-fetch may reuse the slot to fetch non-http
alternates if http-alternates does not exist.  When doing so, it now needs
to update the slot's finished status so run_active_slot waits for the
non-http alternates request to finish.

Signed-off-by: Nick Hengeveld <nickh@reactrix.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-15 09:10:41 -08:00
Junio C Hamano
ea75cb7284 Merge branch 'jc/pack'
* jc/pack:
  pack-objects: simplify "thin" pack.
  verify-pack -v: show delta-chain histogram.
2006-03-13 00:04:10 -08:00
Junio C Hamano
41ce93bea4 Merge branch 'jc/fsck'
* jc/fsck:
  fsck-objects: Remove --standalone
2006-03-13 00:04:05 -08:00
Junio C Hamano
2e158bee7a Merge branch 'nh/http'
* nh/http:
  http-push: cleanup
  http-push: support for updating remote info/refs
  http-push: improve remote lock management
  http-push: refactor remote file/directory processing
  HTTP slot reuse fixes
  http-push: fix revision walk
2006-03-13 00:01:57 -08:00