Commit Graph

16200 Commits

Author SHA1 Message Date
Jonathan Nieder
ab54cd6c4d Documentation: clarify pager configuration
The unwary user may not know how to disable the -FRSX options.

Signed-off-by: Jonathan Nieder <jrnieder@uchicago.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-24 12:04:14 -07:00
Jonathan Nieder
32818085ee Documentation: clarify pager.<cmd> configuration
It was not obvious from the text that pager.<cmd> is a boolean
setting.

While we're changing the description, make some other
improvements: lest we forget and fret, clarify that -p and
pager.<cmd> do not kick in when stdout is not a tty; point to
related core.pager and GIT_PAGER settings; use renamed --paginate
option.

Signed-off-by: Jonathan Nieder <jrnieder@uchicago.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-24 12:01:28 -07:00
Simon Hausmann
f5f7e4a18c Clean up the git-p4 documentation
This patch massages the documentation a bit for improved readability and cleans
it up from outdated options/commands.

Signed-off-by: Simon Hausmann <simon@lst.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-24 12:00:14 -07:00
Alexander Gavrilov
5e568f9e30 Respect core.autocrlf in combined diff
Fix git-diff to make it produce useful 3-way diffs for merge conflicts in
repositories with autocrlf enabled. Otherwise it always reports that the
whole file was changed, because it uses the contents from the working tree
without necessary conversion.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-23 23:59:20 -07:00
Miklos Vajna
7d77016327 Makefile: enable SNPRINTF_RETURNS_BOGUS for HP-UX
In 81cc66a, customization has been added to Makefile for supporting
HP-UX, but git commit is still problematic. This should fix the issue.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Acked-by: Robert Schiele <rschiele@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-23 21:53:35 -07:00
Junio C Hamano
e596cdddf3 t7606: fix custom merge test
Custom merge strategy does not even kick in when the merge is truly
trivial.  The test depended on the behaviour in the git-merge rewritten in
C that broke the trivial merge completely.

Make the test to work on a non-trivial merge to make sure the strategy
kicks in.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-23 19:23:22 -07:00
Junio C Hamano
d6096f17d2 Merge branch 'maint'
* maint:
  unpack_trees(): protect the handcrafted in-core index from read_cache()
  git-p4: Fix one-liner in p4_write_pipe function.
  Completion: add missing '=' for 'diff --diff-filter'
  Fix 'git help help'
2008-08-23 18:28:37 -07:00
Junio C Hamano
446247db78 merge: fix numerus bugs around "trivial merge" area
The "trivial merge" codepath wants to optimize itself by making an
internal call to the read-tree machinery, but it does not read the index
before doing so, and the codepath is never exercised.  Incidentally, this
failure to read the index upfront means that the safety to refuse doing
anything when the index is unmerged does not kick in, either.

These two problem are fixed by using read_cache_unmerged() that does read
the index before checking if it is unmerged at the beginning of
cmd_merge().

The primary logic of the merge, however, assumes that the process never
reads the index in-core, and the call to write_cache_as_tree() it makes
from write_tree_trivial() will always read from the on-disk index that is
prepared the strategy back-ends.  This assumption is now broken by the
above fix.  To fix this issue, we now call discard_cache() before calling
write_tree_trivial() when it wants to write the on-disk index as a tree.

When multiple strategies are tried, their results are evaluated by reading
the resulting index and inspecting it.  The codepath needs to make a call
to read_cache() for each successful strategy, and for that to work, they
need to discard_cache() the one read by the previous round.

Also the "trivial merge" forgot that the current commit is one of the
parents of the resulting commit.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-23 18:17:22 -07:00
Junio C Hamano
913e0e99b6 unpack_trees(): protect the handcrafted in-core index from read_cache()
unpack_trees() rebuilds the in-core index from scratch by allocating a new
structure and finishing it off by copying the built one to the final
index.

The resulting in-core index is Ok for most use, but read_cache() does not
recognize it as such.  The function is meant to be no-op if you already
have loaded the index, until you call discard_cache().

This change the way read_cache() detects an already initialized in-core
index, by introducing an extra bit, and marks the handcrafted in-core
index as initialized, to avoid this problem.

A better fix in the longer term would be to change the read_cache() API so
that it will always discard and re-read from the on-disk index to avoid
confusion.  But there are higher level API that have relied on the current
semantics, and they and their users all need to get converted, which is
outside the scope of 'maint' track.

An example of such a higher level API is write_cache_as_tree(), which is
used by git-write-tree as well as later Porcelains like git-merge, revert
and cherry-pick.  In the longer term, we should remove read_cache() from
there and add one to cmd_write_tree(); other callers expect that the
in-core index they prepared is what gets written as a tree so no other
change is necessary for this particular codepath.

The original version of this patch marked the index by pointing an
otherwise wasted malloc'ed memory with o->result.alloc, but this version
uses Linus's idea to use a new "initialized" bit, which is conceptually
much cleaner.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-23 18:09:27 -07:00
Junio C Hamano
64ca23afda discard_cache: reset lazy name_hash bit
We forgot to reset name_hash_initialized bit when discarding the in-core index.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-23 13:05:10 -07:00
Tor Arvid Lund
893d340f2c git-p4: Fix one-liner in p4_write_pipe function.
The function built a p4 command string via the p4_build_cmd function, but
ignored the result.

Signed-off-by: Tor Arvid Lund <torarvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-22 22:40:13 -07:00
David Aguilar
a7b3269c4b git-submodule: replace duplicated code with a module_list function
Several call sites in git-submodule.sh used the same idiom for getting
submodule information:

	git ls-files --stage -- "$@" | grep '^160000 '

This patch removes this duplication by introducing a module_list function.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-22 22:38:21 -07:00
Nicolas Pitre
4b480c6716 discard revindex data when pack list changes
This is needed to fix verify-pack -v with multiple pack arguments.

Also, in theory, revindex data (if any) must be discarded whenever
reprepare_packed_git() is called. In practice this is hard to trigger
though.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-22 22:00:22 -07:00
Dan Hensgen
34ad1afa71 git-merge documentation: more details about resolving conflicts
Signed-off-by: Dan Hensgen <dan@methodhead.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-22 17:32:54 -07:00
Alex Riesen
9188ed8962 Extend "checkout --track" DWIM to support more cases
The code handles additionally "refs/remotes/<something>/name",
"remotes/<something>/name", and "refs/<namespace>/name".

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-22 17:18:26 -07:00
Jonathan del Strother
a19a424010 Revert "Convert output messages in merge-recursive to past tense."
During a conflicting merge, you would typically see:

  Auto-merged foo.txt
  CONFLICT (content): Merge conflict in foo.txt
  Recorded preimage for 'foo.txt'
  Automatic merge failed; fix conflicts and then commit the result.

and left wondering what happened to "foo.txt".  Did it succeed, and then
conflicted, and then what?

This is because historically there was a progress bar displayed before the
auto-merge is mentioned, and it was expected to take long time, before we
can say "Auto-merged foo.txt".  It turns out it was not the case, and the
original wording "Auto-merging foo.txt" we used to have before 89f40be
(Convert output messages in merge-recursive to past tense., 2007-01-14) is
better.

Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-22 16:51:21 -07:00
Eric Raible
f135aacb5a Completion: add missing '=' for 'diff --diff-filter'
Signed-off-by: Eric Raible <raible@gmail.com>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-22 16:15:21 -07:00
Junio C Hamano
96cda0b106 templates/Makefile: install is unnecessary, just use mkdir -p
The native install on some platforms (namely IRIX 6.5) treats non-absolute
paths as being relative to the root directory rather than relative to
the current directory. Work around this by avoiding install in this case
since it is unnecessary, and instead depend on the local umask setting
and use mkdir.

Tested-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-22 00:21:59 -07:00
Brandon Casey
2cb1f36d50 remote.c: add a function for deleting a refspec array and use it (twice)
A number of call sites allocate memory for a refspec array, populate
its members with heap memory, and then free only the refspec pointer
while leaking the memory allocated for the member elements. Provide
a function for freeing the elements of a refspec array and the array
itself.

Caution to callers: code paths must be checked to ensure that the
refspec members "src" and "dst" can be passed to free.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-22 00:15:37 -07:00
Johannes Sixt
a9da1663df filter-branch: Grok special characters in tag names
The tag rewriting code used a 'sed' expression to substitute the new tag
name into the corresponding field of the annotated tag object. But this is
problematic if the tag name contains special characters. In particular,
if the tag name contained a slash, then the 'sed' expression had a syntax
error. We now protect against this by using 'printf' to assemble the
tag header.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-21 23:39:13 -07:00
Johannes Schindelin
5a4a088add test-lib: do not remove trash_directory if called with --debug
Sometimes you want to keep the trash directory, even if all tests
passed.  For example, when extending tests, it comes it quite handy.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-21 23:38:25 -07:00
Paolo Bonzini
4be636f42c provide more errors for the "merge into empty head" case
A squash merge into an unborn branch could be implemented by building the
index from the merged-from branch, and doing a single commit, but this is
not supported yet.

A non-fast-forward merge into an unborn branch does not make any sense,
because you cannot make a merge commit if you don't have a commit to use
as the parent.

Signed-off-by: Paolo Bonzini <bonzini@gnu.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-21 23:37:38 -07:00
Shawn O. Pearce
ea360dd053 Make reflog query '@{1219188291}' act as '@{2008.8.19.16:24:51.-0700}'
As we support seconds-since-epoch in $GIT_COMMITTER_TIME we should
also support it in a reflog @{...} style notation.  We can easily
tell this part from @{nth} style notation by looking to see if the
value is unreasonably large for an @{nth} style notation.

The value 100000000 was chosen as it is already used by date.c to
disambiguate yyyymmdd format from a seconds-since-epoch time value.

A reflog with 100,000,000 record entries is also simply not valid.
Such a reflog would require at least 7.7 GB to store just the old
and new SHA-1 values.  So our randomly chosen upper limit for @{nth}
notation is "big enough".

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-21 23:30:17 -07:00
Neil Roberts
1352fdbe3b config.mak.in: Pass on LDFLAGS from configure
The configure script allows you to specify flags to pass to the linker
step in the LDFLAGS environment variable but this was being ignored in
the Makefile. Now a make variable gets set to the value passed down
from the configure script.

Signed-off-by: Neil Roberts <bpeeluk@yahoo.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-21 23:16:57 -07:00
Mark Levedahl
99b120af70 git-submodule.sh - Remove trailing / from URL if found
git clone does not complain if a trailing '/' is included in the origin
URL, but doing so causes resolution of a submodule's URL relative to the
superproject to fail. Trailing /'s are likely when cloning locally using
tab-completion, so the slash may appear in either superproject or
submodule URL. So, ignore the trailing slash if it already exists in
the superproject's URL, and don't record one for the submodule (which
could itself have submodules...).

The problem I'm trying to fix is that a number of folks have
superprojects checked out where the recorded origin URL has a trailing
/, and a submodule has its origin in a directory sitting right next to
the superproject on the server. Thus, we have:

	superproject url = server:/public/super
	submodoule url = server:/public/sub1

However, in the checked out superproject's .git/config

[remote "origin"]
	url = server:/public/super/

and for similar reasons, the submodule has its URL recorded in .gitmodules as
[submodule "sub"]

	path = submodule1
	url = ../sub1/

resolve_relative_url gets the submodule's recorded url as $1, which
the caller retrieved from .gitmodules, and retrieves the superprojects
origin from .git/config. So in this case resolve_relative_url has
that:

	url = ../sub1/
	remoteurl = server:/public/super/

So, without any patch, resolve_relative_url computes the submodule's URL as:

	server:/public/super/sub1/

rather than

	server:/public/sub1

In summary, it is essential that resolve_relative_url strip the
trailing / from the superproject's url before starting, and
beneficial if it assures that the result does not contain
a trailing / as the submodule may itself also be a superproject.

Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-21 23:14:09 -07:00
Miklos Vajna
26463c8f7c Fix 'git help help'
git help foo invokes man git-foo if foo is a git command, otherwise it
invokes man gitfoo. 'help' is not a git command, but the manual page is
called git-help, so add this special exception.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Acked-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-21 22:18:21 -07:00
Junio C Hamano
436edc6eae Merge branch 'maint'
* maint:
  compat/snprintf.c: handle snprintf's that always return the # chars transmitted
  git-svn: fix dcommit to urls with embedded usernames
  revision.h: make show_early_output an extern which is defined in revision.c
2008-08-21 01:54:49 -07:00
Brandon Casey
a81892dd8c compat/snprintf.c: handle snprintf's that always return the # chars transmitted
Some platforms provide a horribly broken snprintf. More broken than the
platforms that return -1 when there is too little space in the target buffer
for the formatted string. Some platforms provide an snprintf which _always_
returns the number of characters transmitted to the buffer, regardless of
whether there was enough space or not.

IRIX 6.5 is such a platform. IRIX does have a working snprintf(), but it
is only provided when _NO_XOPEN5 evaluates to zero, and this only happens
if _XOPEN_SOURCE is defined, but definition of _XOPEN_SOURCE prevents
inclusion of many other common functions and defines. So it must be avoided.

Work around these horribly broken snprintf implementations by detecting an
snprintf call which results in the number of transmitted characters exactly
equal to the length of our buffer and retrying with a larger buffer just to
be safe.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Acked-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-21 01:53:44 -07:00
Johan Herland
1a1fcf4abe Teach "git diff -p" HTML funcname patterns
Find lines with <h1>..<h6> tags.

[jc: while at it, reordered entries to sort alphabetically.]

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-20 23:56:31 -07:00
Kirill Smelkov
7c17205b64 Teach "git diff -p" Python funcname patterns
Find classes, functions, and methods definitions.

Signed-off-by: Kirill Smelkov <kirr@mns.spb.ru>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-20 23:53:33 -07:00
Eric Wong
711521e246 git-svn: fix dcommit to urls with embedded usernames
Don't rely on the extracted URL from working_head_info since that has the
username removed.  Instead use the $gs->full_url method (as before with
ba24e74 (git-svn: add ability to specify --commit-url for dcommit,
2008-08-07)) to give us the URL to commit to if --commit-url is not
specified.

Aditionally, since we clean usernames from URLs, checking the URL after
rebase can fail because it doesn't match the URL we used to commit; so
unconditionally provide a username-free URL for checking the result of the
refetch.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-20 23:48:07 -07:00
Junio C Hamano
5630feaf37 Merge branch 'ml/submodule-foreach'
* ml/submodule-foreach:
  git-submodule - Add 'foreach' subcommand
2008-08-20 23:42:33 -07:00
Junio C Hamano
299c3714d4 Merge branch 'pm/log-exit-code'
* pm/log-exit-code:
  Teach git log --exit-code to return an appropriate exit code
  Teach git log --check to return an appropriate exit code
2008-08-20 23:42:29 -07:00
Junio C Hamano
83a1abb37d Merge branch 'sb/commit-tree-minileak'
* sb/commit-tree-minileak:
  Fix commit_tree() buffer leak
2008-08-20 23:42:26 -07:00
Junio C Hamano
16cccd8bff Merge branch 'pb/reflog-dwim'
* pb/reflog-dwim:
  builtin-reflog: Allow reflog expire to name partial ref
2008-08-20 23:42:22 -07:00
Junio C Hamano
4a871de896 Merge branch 'jc/add-stop-at-symlink'
* jc/add-stop-at-symlink:
  add: refuse to add working tree items beyond symlinks
  update-index: refuse to add working tree items beyond symlinks
2008-08-20 23:42:18 -07:00
Junio C Hamano
22c09307bf Merge branch 'kh/diff-tree'
* kh/diff-tree:
  Add test for diff-tree --stdin with two trees
  Teach git diff-tree --stdin to diff trees
  diff-tree: Note that the commit ID is printed with --stdin
  Refactoring: Split up diff_tree_stdin
2008-08-20 23:41:59 -07:00
Junio C Hamano
99b52f2e49 Merge branch 'mg/count-objects'
* mg/count-objects:
  count-objects: Add total pack size to verbose output
2008-08-20 23:41:54 -07:00
Junio C Hamano
1071dd6112 Merge branch 'mz/push-verbose'
* mz/push-verbose:
  Make push more verbose about illegal combination of options
2008-08-20 23:41:51 -07:00
Junio C Hamano
0a8eb7bae5 Merge branch 'jc/index-extended-flags'
* jc/index-extended-flags:
  index: future proof for "extended" index entries
2008-08-20 23:41:47 -07:00
Junio C Hamano
0569d7566e Merge branch 'cc/merge-base-many'
* cc/merge-base-many:
  git-merge-octopus: use (merge-base A (merge B C D E...)) for stepwise merge
  merge-base-many: add trivial tests based on the documentation
  documentation: merge-base: explain "git merge-base" with more than 2 args
  merge-base: teach "git merge-base" to drive underlying merge_bases_many()
2008-08-20 23:41:38 -07:00
Junio C Hamano
f02fa33605 Merge branch 'jc/test-deeper'
* jc/test-deeper:
  tests: use $TEST_DIRECTORY to refer to the t/ directory
2008-08-20 23:40:59 -07:00
Junio C Hamano
6da9d5bf47 Merge branch 'js/parallel-test'
* js/parallel-test:
  Update t/.gitignore to ignore all trash directories
  Enable parallel tests
  tests: Clarify dependencies between tests, 'aggregate-results' and 'clean'
  t9700: remove useless check
2008-08-20 23:40:56 -07:00
Mark Levedahl
7c69561986 git-submodule.sh - Remove trailing / from URL if found
git clone does not complain if a trailing '/' is included in the origin
URL, but doing so causes resolution of a submodule's URL relative to the
superproject to fail. Regardless of whether git is changed to remove the
trailing / before recording the URL, we should avoid this issue in
submodule as existing repositories can have this problem.

Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-20 23:18:53 -07:00
Junio C Hamano
131f9a108b Fix "git-merge -s bogo" help text
It does not make much sense to reuse the output code from "git help" to
show the list of commands to the standard output while giving the error
message before that to the standard error stream.  This makes the output
consistent to that of the 1.6.0 version of "git merge".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-20 22:57:55 -07:00
Brandon Casey
4dc1db0bd1 revision.h: make show_early_output an extern which is defined in revision.c
The variable show_early_output is defined in revision.c and should be
declared extern in revision.h so that the linker does not complain
about multiply defined variables.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-20 19:59:06 -07:00
Junio C Hamano
ea3594e041 Update draft release notes for 1.6.1
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-20 16:32:15 -07:00
Junio C Hamano
e28a8670a6 Merge branch 'maint'
* maint:
  Update draft release notes for 1.6.0.1
  Add hints to revert documentation about other ways to undo changes
  Install templates with the user and group of the installing personality
  "git-merge": allow fast-forwarding in a stat-dirty tree
  completion: find out supported merge strategies correctly
  decorate: allow const objects to be decorated
  for-each-ref: cope with tags with incomplete lines
  diff --check: do not get confused by new blank lines in the middle
  remote.c: remove useless if-before-free test
  mailinfo: avoid violating strbuf assertion
  git format-patch: avoid underrun when format.headers is empty or all NLs
2008-08-20 16:18:16 -07:00
Junio C Hamano
9b99e641c1 Update draft release notes for 1.6.0.1
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-20 16:05:01 -07:00
Tarmigan Casebolt
3a634dcf51 Add hints to revert documentation about other ways to undo changes
Based on its name, people may read the 'git revert' documentation when
they want to undo local changes, especially people who have used other
SCM's.  'git revert' may not be what they had in mind, but git
provides several other ways to undo changes to files.  We can help
them by pointing them towards the git commands that do what they might
want to do.

Cc: Daniel Barkalow <barkalow@iabervon.org>
Cc: Lea Wiemann <lewiemann@gmail.com>
Signed-off-by: Tarmigan Casebolt <tarmigan+git@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2008-08-20 16:04:45 -07:00