Code

git.git
15 years agogit-archive: work in bare repos
Charles Bailey [Sat, 25 Oct 2008 15:38:14 +0000 (11:38 -0400)]
git-archive: work in bare repos

This moves the call to git_config to a place where it doesn't break the
logic for using git archive in a bare repository but retains the fix to
make git archive respect core.autocrlf.

Tests are by René Scharfe.

Signed-off-by: Charles Bailey <charles@hashpling.org>
Tested-by: Deskin Miller <deskinm@umich.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoFix git update-ref --no-deref -d.
Miklos Vajna [Sun, 26 Oct 2008 02:33:58 +0000 (03:33 +0100)]
Fix git update-ref --no-deref -d.

Till now --no-deref was just ignored when deleting refs, fix this.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agorename_ref(): handle the case when the reflog of a ref does not exist
Miklos Vajna [Sun, 26 Oct 2008 02:33:57 +0000 (03:33 +0100)]
rename_ref(): handle the case when the reflog of a ref does not exist

We tried to check if a reflog of a ref is a symlink without first
checking if it exists, which is a bug.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoFix git branch -m for symrefs.
Miklos Vajna [Sun, 26 Oct 2008 02:33:56 +0000 (03:33 +0100)]
Fix git branch -m for symrefs.

This had two problems with symrefs. First, it copied the actual sha1
instead of the "pointer", second it failed to remove the old ref after a
successful rename.

Given that till now delete_ref() always dereferenced symrefs, a new
parameters has been introduced to delete_ref() to allow deleting refs
without a dereference.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoreceive-pack: fix "borrowing from alternate object store" implementation
Junio C Hamano [Sun, 26 Oct 2008 18:07:18 +0000 (11:07 -0700)]
receive-pack: fix "borrowing from alternate object store" implementation

In the alternate_object_database structure, ent->base[] is a buffer the
users can use to form pathnames to loose objects, and ent->name is a
pointer into that buffer (it points at one beyond ".git/objects/").  If
you get a call to add_refs_from_alternate() after somebody used the entry
(has_loose_object() has been called, for example), *ent->name would not be
NUL, and ent->base[] won't be the path to the object store.

This caller is expecting to read the path to the object store in ent->base[];
it needs to NUL terminate the buffer if it wants to.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogitweb: generate parent..current URLs
Giuseppe Bilotta [Tue, 21 Oct 2008 19:34:54 +0000 (21:34 +0200)]
gitweb: generate parent..current URLs

If use_pathinfo is enabled, href now creates links that contain paths in
the form $project/$action/oldhash:/oldname..newhash:/newname for actions
that use hash_parent etc.

If any of the filename contains two consecutive dots, it's kept as a CGI
parameter since the resulting path would otherwise be ambiguous.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogitweb: parse parent..current syntax from PATH_INFO
Giuseppe Bilotta [Tue, 21 Oct 2008 19:34:53 +0000 (21:34 +0200)]
gitweb: parse parent..current syntax from PATH_INFO

This patch makes it possible to use an URL such as
project/action/somebranch..otherbranch:/filename to get a diff between
different version of a file. Paths like
project/action/somebranch:/somefile..otherbranch:/otherfile are parsed
as well.

All '*diff' actions and in general actions that use $hash_parent[_base]
and $file_parent (e.g. 'shortlog') can now get all of their parameters
from PATH_INFO

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogitweb: use_pathinfo filenames start with /
Giuseppe Bilotta [Tue, 21 Oct 2008 19:34:52 +0000 (21:34 +0200)]
gitweb: use_pathinfo filenames start with /

Generate PATH_INFO URLs in the form project/action/hash_base:/filename
rather than project/action/hash_base:filename (the latter form is still
accepted in input).

This minimal change allows relative navigation to work properly when
viewing HTML files in raw ('blob_plain') mode.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogitweb: generate project/action/hash URLs
Giuseppe Bilotta [Tue, 21 Oct 2008 19:34:51 +0000 (21:34 +0200)]
gitweb: generate project/action/hash URLs

When generating path info URLs, reduce the number of CGI parameters by
embedding action and hash_parent:filename or hash in the path.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogitweb: parse project/action/hash_base:filename PATH_INFO
Giuseppe Bilotta [Tue, 21 Oct 2008 19:34:50 +0000 (21:34 +0200)]
gitweb: parse project/action/hash_base:filename PATH_INFO

This patch enables gitweb to parse URLs with more information embedded
in PATH_INFO, reducing the need for CGI parameters. The typical gitweb
path is now $project/$action/$hash_base:$file_name or
$project/$action/$hash

This is mostly backwards compatible with the old-style gitweb paths,
$project/$branch[:$filename], except when it was used to access a branch
whose name matches a gitweb action.

Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Acked-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoblame: use xdi_diff_hunks(), get rid of struct patch
René Scharfe [Sat, 25 Oct 2008 13:31:36 +0000 (15:31 +0200)]
blame: use xdi_diff_hunks(), get rid of struct patch

Based on a patch by Brian Downing, this replaces the struct patch based
code for blame passing with calls to xdi_diff_hunks().  This way we
avoid generating and then parsing patches; we only let the interesting
infos be passed to our callbacks instead.  This makes blame a bit faster:

   $ blame="./git blame -M -C -C -p --incremental v1.6.0"

   # master
   $ /usr/bin/time $blame Makefile >/dev/null
   1.38user 0.14system 0:01.52elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
   0inputs+0outputs (0major+12226minor)pagefaults 0swaps
   $ /usr/bin/time $blame cache.h >/dev/null
   1.66user 0.13system 0:01.80elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
   0inputs+0outputs (0major+12262minor)pagefaults 0swaps

   # this patch series
   $ /usr/bin/time $blame Makefile >/dev/null
   1.27user 0.12system 0:01.40elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
   0inputs+0outputs (0major+11836minor)pagefaults 0swaps
   $ /usr/bin/time $blame cache.h >/dev/null
   1.52user 0.12system 0:01.70elapsed 97%CPU (0avgtext+0avgdata 0maxresident)k
   0inputs+0outputs (0major+12052minor)pagefaults 0swaps

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoadd xdi_diff_hunks() for callers that only need hunk lengths
René Scharfe [Sat, 25 Oct 2008 13:31:15 +0000 (15:31 +0200)]
add xdi_diff_hunks() for callers that only need hunk lengths

Based on a patch by Brian Downing, this uses the xdiff emit_func feature
to implement xdi_diff_hunks().  It's a function that calls a callback for
each hunk of a diff, passing its lengths.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoAllow alternate "low-level" emit function from xdl_diff
Brian Downing [Sat, 25 Oct 2008 13:30:54 +0000 (15:30 +0200)]
Allow alternate "low-level" emit function from xdl_diff

For some users (e.g. git blame), getting textual patch output is just
extra work, as they can get all the information they need from the low-
level diff structures.  Allow for an alternate low-level emit function
to be defined to allow bypassing the textual patch generation; set
xemitconf_t's emit_func member to enable this.

The (void (*)()) type is pretty ugly, but the alternative would be to
include most of the private xdiff headers in xdiff.h to get the types
required for the "proper" function prototype.  Also, a (void *) won't
work, as ANSI C doesn't allow a function pointer to be cast to an
object pointer.

Signed-off-by: Brian Downing <bdowning@lavos.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoAlways initialize xpparam_t to 0
Brian Downing [Sat, 25 Oct 2008 13:30:37 +0000 (15:30 +0200)]
Always initialize xpparam_t to 0

We're going to be adding some parameters to this, so we can't have
any uninitialized data in it.

Signed-off-by: Brian Downing <bdowning@lavos.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoblame: inline get_patch()
René Scharfe [Sat, 25 Oct 2008 13:30:22 +0000 (15:30 +0200)]
blame: inline get_patch()

Inline get_patch() to its only call site as a preparation for getting rid
of struct patch.  Also we don't need to check the ptr members because
fill_origin_blob() already did, and the caller didn't check for NULL
anyway, so drop the test.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-daemon: set REMOTE_ADDR to client address
Joey Hess [Fri, 24 Oct 2008 05:48:50 +0000 (01:48 -0400)]
git-daemon: set REMOTE_ADDR to client address

This allows hooks like pre-receive to look at the client's IP
address.

Of course the IP address can't be used to get strong security;
git-daemon isn't the right thing to use if you need that. However,
basic IP address checking can be good enough in some situations.

REMOTE_ADDR is the same environment variable used to communicate the
client's address to CGI scripts.

Signed-off-by: Joey Hess <joey@kitenet.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-svn: change dashed git-config to git config
Deskin Miller [Thu, 23 Oct 2008 19:21:34 +0000 (15:21 -0400)]
git-svn: change dashed git-config to git config

Signed-off-by: Deskin Miller <deskinm@umich.edu>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoindex-pack: don't leak leaf delta result
Nicolas Pitre [Thu, 23 Oct 2008 19:05:59 +0000 (15:05 -0400)]
index-pack: don't leak leaf delta result

Another (but minor this time) fallout from commit 9441b61 (index-pack:
rationalize delta resolution code, 2008-10-17).

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoimprove index-pack tests
Nicolas Pitre [Thu, 23 Oct 2008 00:59:22 +0000 (20:59 -0400)]
improve index-pack tests

Commit 9441b61dc5 introduced serious bugs in index-pack which are
described and fixed by commit ce3f6dc655.  However, despite the
boldness of those bugs, the test suite still passed.

This improves t5302-pack-index.sh so to ensure a much better code
path coverage.  With commit ce3f6dc655 reverted, 17 of the 26 tests
do fail now.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agosubmodule: fix some non-portable grep invocations
Jeff King [Wed, 22 Oct 2008 19:22:53 +0000 (15:22 -0400)]
submodule: fix some non-portable grep invocations

Not all greps support "-e", but in this case we can easily convert it to a
single extended regex.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-remote: list branches in vertical lists
Johannes Sixt [Wed, 22 Oct 2008 07:39:47 +0000 (09:39 +0200)]
git-remote: list branches in vertical lists

Previously, branches were listed on a single line in each section. But
if there are many branches, then horizontal, line-wrapped lists are very
inconvenient to scan for a human. This makes the lists vertical, i.e one
branch per line is printed.

Since "git remote" is porcelain, we can easily make this
backwards-incompatible change.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agorm: loosen safety valve for empty files
Jeff King [Tue, 21 Oct 2008 13:54:19 +0000 (09:54 -0400)]
rm: loosen safety valve for empty files

If a file is different between the working tree copy, the index, and the
HEAD, then we do not allow it to be deleted without --force.

However, this is overly tight in the face of "git add --intent-to-add":

  $ git add --intent-to-add file
  $ : oops, I don't actually want to stage that yet
  $ git rm --cached file
  error: 'empty' has staged content different from both the
  file and the HEAD (use -f to force removal)
  $ git rm -f --cached file

Unfortunately, there is currently no way to distinguish between an empty
file that has been added and an "intent to add" file. The ideal behavior
would be to disallow the former while allowing the latter.

This patch loosens the safety valve to allow the deletion only if we are
deleting the cached entry and the cached content is empty.  This covers
the intent-to-add situation, and assumes there is little harm in not
protecting users who have legitimately added an empty file.  In many
cases, the file will still be empty, in which case the safety valve does
not trigger anyway (since the content remains untouched in the working
tree). Otherwise, we do remove the fact that no content was staged, but
given that the content is by definition empty, it is not terribly
difficult for a user to recreate it.

However, we still document the desired behavior in the form of two
tests. One checks the correct removal of an intent-to-add file. The other
checks that we still disallow removal of empty files, but is marked as
expect_failure to indicate this compromise. If the intent-to-add feature
is ever extended to differentiate between normal empty files and
intent-to-add files, then the safety valve can be re-tightened.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-rebase--interactive.sh: comparision with == is bashism
Junio C Hamano [Wed, 22 Oct 2008 18:59:30 +0000 (11:59 -0700)]
git-rebase--interactive.sh: comparision with == is bashism

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'jk/diff-convfilter'
Junio C Hamano [Wed, 22 Oct 2008 00:58:25 +0000 (17:58 -0700)]
Merge branch 'jk/diff-convfilter'

* jk/diff-convfilter:
  diff: add filter for converting binary to text
  diff: introduce diff.<driver>.binary
  diff: unify external diff and funcname parsing code
  t4012: use test_cmp instead of cmp

15 years agoMerge branch 'js/maint-fetch-update-head'
Junio C Hamano [Wed, 22 Oct 2008 00:58:21 +0000 (17:58 -0700)]
Merge branch 'js/maint-fetch-update-head'

* js/maint-fetch-update-head:
  pull: allow "git pull origin $something:$current_branch" into an unborn branch
  Fix fetch/pull when run without --update-head-ok

Conflicts:
t/t5510-fetch.sh

15 years agoMerge branch 'jc/maint-co-track'
Junio C Hamano [Wed, 22 Oct 2008 00:58:11 +0000 (17:58 -0700)]
Merge branch 'jc/maint-co-track'

* jc/maint-co-track:
  Enhance hold_lock_file_for_{update,append}() API
  demonstrate breakage of detached checkout with symbolic link HEAD
  Fix "checkout --track -b newbranch" on detached HEAD

Conflicts:
builtin-commit.c

15 years agoMerge branch 'rs/alloc-ref'
Junio C Hamano [Wed, 22 Oct 2008 00:58:01 +0000 (17:58 -0700)]
Merge branch 'rs/alloc-ref'

* rs/alloc-ref:
  make alloc_ref_from_str() the new alloc_ref()
  use alloc_ref_from_str() everywhere
  add alloc_ref_with_prefix()

15 years agoMerge branch 'jk/fix-ls-files-other'
Junio C Hamano [Wed, 22 Oct 2008 00:57:56 +0000 (17:57 -0700)]
Merge branch 'jk/fix-ls-files-other'

* jk/fix-ls-files-other:
  refactor handling of "other" files in ls-files and status

15 years agobuiltin-blame: Reencode commit messages according to git-log rules.
Alexander Gavrilov [Tue, 21 Oct 2008 20:55:57 +0000 (00:55 +0400)]
builtin-blame: Reencode commit messages according to git-log rules.

Currently git-blame outputs text from the commit messages
(e.g. the author name and the summary string) as-is, without
even providing any information about the encoding used for
the data. It makes interpreting the data in multilingual
environment very difficult.

This commit changes the blame implementation to recode the
messages using the rules used by other commands like git-log.
Namely, the target encoding can be specified through the
i18n.commitEncoding or i18n.logOutputEncoding options, or
directly on the command line using the --encoding parameter.

Converting the encoding before output seems to be more
friendly to the porcelain tools than simply providing the
value of the encoding header, and does not require changing
the output format.

If anybody needs the old behavior, it is possible to
achieve it by specifying --encoding=none.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'jc/maint-reset-remove-unmerged-new'
Junio C Hamano [Tue, 21 Oct 2008 20:48:41 +0000 (13:48 -0700)]
Merge branch 'jc/maint-reset-remove-unmerged-new'

* jc/maint-reset-remove-unmerged-new:
  reset --hard/read-tree --reset -u: remove unmerged new paths

15 years agoMerge branch 'maint'
Junio C Hamano [Tue, 21 Oct 2008 20:47:22 +0000 (13:47 -0700)]
Merge branch 'maint'

* maint:
  GIT 1.6.0.3
  rehabilitate 'git index-pack' inside the object store

15 years agoGIT 1.6.0.3 v1.6.0.3
Junio C Hamano [Tue, 21 Oct 2008 20:37:42 +0000 (13:37 -0700)]
GIT 1.6.0.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agorehabilitate 'git index-pack' inside the object store
Nicolas Pitre [Tue, 21 Oct 2008 01:17:07 +0000 (21:17 -0400)]
rehabilitate 'git index-pack' inside the object store

Before commit d0b92a3f6e it was possible to run 'git index-pack'
directly in the .git/objects/pack/ directory.  Restore that ability.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint'
Junio C Hamano [Tue, 21 Oct 2008 06:40:21 +0000 (23:40 -0700)]
Merge branch 'maint'

* maint:
  Fix testcase failure when extended attributes are in use

15 years agoworkflows documentation: fix link to git-request-pull[1]
Lee Marlow [Mon, 20 Oct 2008 17:35:31 +0000 (11:35 -0600)]
workflows documentation: fix link to git-request-pull[1]

Signed-off-by: Lee Marlow <lee.marlow@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agobash completion: Add 'workflows' to 'git help'
Lee Marlow [Mon, 20 Oct 2008 17:31:38 +0000 (11:31 -0600)]
bash completion: Add 'workflows' to 'git help'

Completion for new workflow documentation introduced in f948dd8

Signed-off-by: Lee Marlow <lee.marlow@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agorebase-i-p: minimum fix to obvious issues
Junio C Hamano [Mon, 20 Oct 2008 23:36:38 +0000 (16:36 -0700)]
rebase-i-p: minimum fix to obvious issues

Jeff King noticed that this series uses non-portable ${var:0:7} syntax
to splice a string, which is not even in POSIX, in the script.  A quick
look at around the offending part revealed a few issues, which this commit
fixes:

 * Why filter output from "rev-list --left-right A...B" and look for the
   ones that begin with ">"?  Wouldn't "rev-list A..B" give that?

 * The abbreviated SHA-1 are made with "rev-list --abbrev=7" into $TODO in
   an earlier invocation, and it can be more than 7 letters to avoid
   ambiguity.  Not just that "${r:0:7} is not even in POSIX", but use of
   it here is actively wrong.

 * There is no point in catting a single file and piping it into grep.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge git://git.kernel.org/pub/scm/gitk/gitk
Junio C Hamano [Tue, 21 Oct 2008 05:16:09 +0000 (22:16 -0700)]
Merge git://git.kernel.org/pub/scm/gitk/gitk

* git://git.kernel.org/pub/scm/gitk/gitk:
  gitk: Turn short SHA1 names into links too
  gitk: Regenerate .po files
  gitk: New way of constructing menus that allows for Alt+letter accelerators
  gitk: Bind Key-Return to create on new branch dialog
  gitk: Fix binding for <Return> in sha1 entry field
  gitk: Clean up file encoding code and add enable/disable option
  gitk: Implement batch lookup and caching of encoding attrs
  gitk: Enhance file encoding support
  gitk: Add untranslated error messages to translation
  gitk: Fix a bug in collapsing deeply nested trees
  gitk: Use <Button-2> for context menus on OSX

15 years agodocument "intent to add" option to git-add
Jeff King [Tue, 21 Oct 2008 00:36:25 +0000 (20:36 -0400)]
document "intent to add" option to git-add

This was added by 3942581 but never documented.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogitk: Turn short SHA1 names into links too
Paul Mackerras [Mon, 20 Oct 2008 23:18:12 +0000 (10:18 +1100)]
gitk: Turn short SHA1 names into links too

This changes the link detection logic to accept strings of between 6
and 40 hex characters as a possible SHA1 ID of another commit, rather
than insisting on seeing the full 40 hex characters.

To make the logic that turns a possible link into an actual link work
with abbreviated IDs, this changes the way the commitinterest array is
used, and puts the code that deals with it in a pair of new functions.
The commitinterest array is now indexed by just the first 4 characters
of the interesting SHA1 ID, and each element is a list of id + command
pairs.  This also pulls out the logic for expanding an abbreviated
SHA1 to the list of matching full IDs into its own function (the way
it is done is still the same slow way it was done before, which should
be improved some day).

This also fixes the bug where clicking on a link would take you to the
wrong commit if the line number of the target had changed since the
link was made.

This is based on a patch by Linus Torvalds, but totally rewritten by me.

Signed-off-by: Paul Mackerras <paulus@samba.org>
15 years agofix multiple issues in index-pack
Nicolas Pitre [Mon, 20 Oct 2008 20:46:19 +0000 (16:46 -0400)]
fix multiple issues in index-pack

Since commit 9441b61dc5, two issues affected correct behavior of
index-pack:

 1) The real_type of a delta object is the 'real_type' of its base, not
    the 'type' which can be a "delta type".  Consequence of this is a
    corrupted pack index file which only needs to be recreated with a
    good index-pack command ('git verify-pack' will flag those).

 2) The code sequence:

        result->data = patch_delta(get_base_data(base), base->obj->size,
                                   delta_data, delta_size, &result->size);

    has two issues of its own since base->obj->size should instead be
    base->size as we want the size of the actual object data and not
    the size of the delta object it is represented by.  Except that
    simply replacing base->obj->size with base->size won't make the
    code more correct as the C language doesn't enforce a particular
    ordering for the evaluation of needed arguments for a function call,
    hence base->size could be pushed on the stack before get_base_data()
    which initializes base->size is called.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Tested-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoFix testcase failure when extended attributes are in use
Junio C Hamano [Mon, 20 Oct 2008 05:51:17 +0000 (22:51 -0700)]
Fix testcase failure when extended attributes are in use

06cbe855 (Make core.sharedRepository more generic, 2008-04-16) made
several testcases in t1301-shared-repo.sh which fail if on a system
which creates files with extended attributes (e.g. SELinux), since ls
appends a '+' sign to the permission set in such cases.  In fact,
POSIX.1 allows ls to add a single printable character after the usual
3x3 permission bits to show that an optional alternate/additional access
method is associated with the path.

This fixes the testcase to strip any such sign prior to verifying the
permission set.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Tested-by: Deskin Miller <deskinm@umich.edu>
15 years agoMerge branch 'sh/maint-rebase3'
Junio C Hamano [Sun, 19 Oct 2008 23:07:29 +0000 (16:07 -0700)]
Merge branch 'sh/maint-rebase3'

* sh/maint-rebase3:
  rebase--interactive: fix parent rewriting for dropped commits

15 years agoMerge branch 'tr/workflow-doc'
Junio C Hamano [Sun, 19 Oct 2008 23:07:23 +0000 (16:07 -0700)]
Merge branch 'tr/workflow-doc'

* tr/workflow-doc:
  Documentation: add manpage about workflows
  Documentation: Refer to git-rebase(1) to warn against rewriting
  Documentation: new upstream rebase recovery section in git-rebase

15 years agoMerge branch 'mv/clonev'
Junio C Hamano [Sun, 19 Oct 2008 23:07:07 +0000 (16:07 -0700)]
Merge branch 'mv/clonev'

* mv/clonev:
  Implement git clone -v

15 years agoMerge branch 'ml/cygwin-filemode'
Junio C Hamano [Sun, 19 Oct 2008 23:07:02 +0000 (16:07 -0700)]
Merge branch 'ml/cygwin-filemode'

* ml/cygwin-filemode:
  compat/cygwin.c - Use cygwin's stat if core.filemode == true

15 years agoMerge branch 'gb/refactor-pathinfo'
Junio C Hamano [Sun, 19 Oct 2008 23:06:53 +0000 (16:06 -0700)]
Merge branch 'gb/refactor-pathinfo'

* gb/refactor-pathinfo:
  gitweb: refactor input parameters parse/validation

15 years agoMerge branch 'dp/checkattr'
Junio C Hamano [Sun, 19 Oct 2008 23:06:47 +0000 (16:06 -0700)]
Merge branch 'dp/checkattr'

* dp/checkattr:
  git-check-attr(1): use 'verse' for multi-line synopsis sections
  check-attr: Add --stdin option
  check-attr: add an internal check_attr() function

15 years agoMerge branch 'gb/formatpatch-autonbr'
Junio C Hamano [Sun, 19 Oct 2008 23:06:44 +0000 (16:06 -0700)]
Merge branch 'gb/formatpatch-autonbr'

* gb/formatpatch-autonbr:
  format-patch: autonumber by default

15 years agoMerge branch 'sp/describe-lwtag'
Junio C Hamano [Sun, 19 Oct 2008 23:06:39 +0000 (16:06 -0700)]
Merge branch 'sp/describe-lwtag'

* sp/describe-lwtag:
  describe: Make --tags and --all match lightweight tags more often

15 years agoMerge branch 'ae/preservemerge'
Junio C Hamano [Sun, 19 Oct 2008 23:06:31 +0000 (16:06 -0700)]
Merge branch 'ae/preservemerge'

* ae/preservemerge:
  rebase: Support preserving merges in non-interactive mode

15 years agoMerge branch 'mv/merge-noff'
Junio C Hamano [Sun, 19 Oct 2008 23:06:21 +0000 (16:06 -0700)]
Merge branch 'mv/merge-noff'

* mv/merge-noff:
  builtin-commit: use reduce_heads() only when appropriate

Conflicts:
builtin-commit.c
t/t7600-merge.sh

15 years agoMerge branch 'ns/rebase-noverify'
Junio C Hamano [Sun, 19 Oct 2008 23:05:58 +0000 (16:05 -0700)]
Merge branch 'ns/rebase-noverify'

* ns/rebase-noverify:
  rebase: Document --no-verify option to bypass pre-rebase hook
  rebase --no-verify

15 years agoMerge branch 'maint'
Junio C Hamano [Sun, 19 Oct 2008 22:53:46 +0000 (15:53 -0700)]
Merge branch 'maint'

* maint:
  Documentation: Clarify '--signoff' for git-commit

15 years agoFix mismerge at cdb22c4 in builtin-checkout.c
Junio C Hamano [Sun, 19 Oct 2008 22:32:35 +0000 (15:32 -0700)]
Fix mismerge at cdb22c4 in builtin-checkout.c

The code to complain when -b is not given but an explicit --track/--no-track
override was given from the command line was unchanged on one branch and
reworked on the other branch.  The merge result incorrectly kept it.

Spotted by Matt McCutchen.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-merge-recursive: honor merge.conflictstyle once again
Matt McCutchen [Sun, 19 Oct 2008 00:40:50 +0000 (20:40 -0400)]
git-merge-recursive: honor merge.conflictstyle once again

This was originally implemented in c236bcd06138bcbc929b86ad1a513635bf4847b2
but was lost to a mismerge in 9ba929ed652f5ed7707f1c684999af4ad02c4925.

Signed-off-by: Matt McCutchen <matt@mattmccutchen.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoGit.pm: do not break inheritance
Christian Jaeger [Sat, 18 Oct 2008 18:25:12 +0000 (20:25 +0200)]
Git.pm: do not break inheritance

Make it possible to write subclasses of Git.pm

Signed-off-by: Christian Jaeger <christian@jaeger.mine.nu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoparse-opt: migrate builtin-checkout-index.
Miklos Vajna [Sat, 18 Oct 2008 01:17:23 +0000 (03:17 +0200)]
parse-opt: migrate builtin-checkout-index.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDocumentation: add manpage about workflows
Thomas Rast [Sun, 19 Oct 2008 15:20:21 +0000 (17:20 +0200)]
Documentation: add manpage about workflows

This attempts to make a manpage about workflows that is both handy to
point people at it and as a beginner's introduction.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDocumentation: Spelling fix
Fredrik Skolmli [Sun, 19 Oct 2008 16:09:43 +0000 (18:09 +0200)]
Documentation: Spelling fix

Signed-off-by: Fredrik Skolmli <fredrik@frsk.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'pb/rename-rowin32'
Junio C Hamano [Sun, 19 Oct 2008 19:38:50 +0000 (12:38 -0700)]
Merge branch 'pb/rename-rowin32'

* pb/rename-rowin32:
  Do not rename read-only files during a push

Looks-fine-to-me-by: Shawn O. Pearce <spearce@spearce.org>
Acked-by: Johannes Sixt <johannes.sixt@telecom.at>
15 years agoEnhance hold_lock_file_for_{update,append}() API
Junio C Hamano [Fri, 17 Oct 2008 22:44:39 +0000 (15:44 -0700)]
Enhance hold_lock_file_for_{update,append}() API

This changes the "die_on_error" boolean parameter to a mere "flags", and
changes the existing callers of hold_lock_file_for_update/append()
functions to pass LOCK_DIE_ON_ERROR.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agodemonstrate breakage of detached checkout with symbolic link HEAD
Junio C Hamano [Fri, 17 Oct 2008 22:56:11 +0000 (15:56 -0700)]
demonstrate breakage of detached checkout with symbolic link HEAD

When core.prefersymlinkrefs is in use, detaching the HEAD by
checkout incorrectly clobbers the tip of the current branch.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDocumentation: Clarify '--signoff' for git-commit
Abhijit Bhopatkar [Sun, 19 Oct 2008 04:19:23 +0000 (09:49 +0530)]
Documentation: Clarify '--signoff' for git-commit

'--signoff' uses commiter name always to add the signoff line,
make it explicit in the documentation.

Signed-off-by: Abhijit Bhopatkar <bain@devslashzero.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoreset --hard/read-tree --reset -u: remove unmerged new paths
Junio C Hamano [Wed, 15 Oct 2008 23:00:06 +0000 (16:00 -0700)]
reset --hard/read-tree --reset -u: remove unmerged new paths

When aborting a failed merge that has brought in a new path using "git
reset --hard" or "git read-tree --reset -u", we used to first forget about
the new path (via read_cache_unmerged) and then matched the working tree
to what is recorded in the index, thus ending up leaving the new path in
the work tree.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoUpdate draft release notes for 1.6.1
Junio C Hamano [Sat, 18 Oct 2008 15:30:39 +0000 (08:30 -0700)]
Update draft release notes for 1.6.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint'
Junio C Hamano [Sat, 18 Oct 2008 15:26:44 +0000 (08:26 -0700)]
Merge branch 'maint'

* maint:
  Hopefully the final draft release notes update before 1.6.0.3
  diff(1): clarify what "T"ypechange status means
  contrib: update packinfo.pl to not use dashed commands
  force_object_loose: Fix memory leak
  tests: shell negation portability fix

15 years agoHopefully the final draft release notes update before 1.6.0.3
Junio C Hamano [Sat, 18 Oct 2008 15:26:39 +0000 (08:26 -0700)]
Hopefully the final draft release notes update before 1.6.0.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agodiff(1): clarify what "T"ypechange status means
Junio C Hamano [Sat, 18 Oct 2008 15:20:51 +0000 (08:20 -0700)]
diff(1): clarify what "T"ypechange status means

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'db/maint-checkout-b' into maint
Junio C Hamano [Sat, 18 Oct 2008 15:18:11 +0000 (08:18 -0700)]
Merge branch 'db/maint-checkout-b' into maint

* db/maint-checkout-b:
  Check early that a new branch is new and valid

15 years agodiff: add filter for converting binary to text
Jeff King [Sun, 5 Oct 2008 21:43:45 +0000 (17:43 -0400)]
diff: add filter for converting binary to text

When diffing binary files, it is sometimes nice to see the
differences of a canonical text form rather than either a
binary patch or simply "binary files differ."

Until now, the only option for doing this was to define an
external diff command to perform the diff. This was a lot of
work, since the external command needed to take care of
doing the diff itself (including mode changes), and lost the
benefit of git's colorization and other options.

This patch adds a text conversion option, which converts a
file to its canonical format before performing the diff.
This is less flexible than an arbitrary external diff, but
is much less work to set up. For example:

  $ echo '*.jpg diff=exif' >>.gitattributes
  $ git config diff.exif.textconv exiftool
  $ git config diff.exif.binary false

allows one to see jpg diffs represented by the text output
of exiftool.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
15 years agodiff: introduce diff.<driver>.binary
Jeff King [Sun, 5 Oct 2008 21:43:36 +0000 (17:43 -0400)]
diff: introduce diff.<driver>.binary

The "diff" gitattribute is somewhat overloaded right now. It
can say one of three things:

  1. this file is definitely binary, or definitely not
     (i.e., diff or !diff)
  2. this file should use an external diff engine (i.e.,
     diff=foo, diff.foo.command = custom-script)
  3. this file should use particular funcname patterns
     (i.e., diff=foo, diff.foo.(x?)funcname = some-regex)

Most of the time, there is no conflict between these uses,
since using one implies that the other is irrelevant (e.g.,
an external diff engine will decide for itself whether the
file is binary).

However, there is at least one conflicting situation: there
is no way to say "use the regular rules to determine whether
this file is binary, but if we do diff it textually, use
this funcname pattern." That is, currently setting diff=foo
indicates that the file is definitely text.

This patch introduces a "binary" config option for a diff
driver, so that one can explicitly set diff.foo.binary. We
default this value to "don't know". That is, setting a diff
attribute to "foo" and using "diff.foo.funcname" will have
no effect on the binaryness of a file. To get the current
behavior, one can set diff.foo.binary to true.

This patch also has one additional advantage: it cleans up
the interface to the userdiff code a bit. Before, calling
code had to know more about whether attributes were false,
true, or unset to determine binaryness. Now that binaryness
is a property of a driver, we can represent these situations
just by passing back a driver struct.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
15 years agodiff: unify external diff and funcname parsing code
Jeff King [Sun, 5 Oct 2008 21:43:21 +0000 (17:43 -0400)]
diff: unify external diff and funcname parsing code

Both sets of code assume that one specifies a diff profile
as a gitattribute via the "diff=foo" attribute. They then
pull information about that profile from the config as
diff.foo.*.

The code for each is currently completely separate from the
other, which has several disadvantages:

  - there is duplication as we maintain code to create and
    search the separate lists of external drivers and
    funcname patterns

  - it is difficult to add new profile options, since it is
    unclear where they should go

  - the code is difficult to follow, as we rely on the
    "check if this file is binary" code to find the funcname
    pattern as a side effect. This is the first step in
    refactoring the binary-checking code.

This patch factors out these diff profiles into "userdiff"
drivers. A file with "diff=foo" uses the "foo" driver, which
is specified by a single struct.

Note that one major difference between the two pieces of
code is that the funcname patterns are always loaded,
whereas external drivers are loaded only for the "git diff"
porcelain; the new code takes care to retain that situation.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
15 years agot4012: use test_cmp instead of cmp
Jeff King [Sun, 5 Oct 2008 21:42:35 +0000 (17:42 -0400)]
t4012: use test_cmp instead of cmp

This makes erroneous output slightly easier to see. We also
flip the argument order to match our usual style.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
15 years agoformat-patch: autonumber by default
Brian Gernhardt [Thu, 2 Oct 2008 20:55:39 +0000 (16:55 -0400)]
format-patch: autonumber by default

format-patch is most commonly used for multiple patches at once when
sending a patchset, in which case we want to number the patches; on
the other hand, single patches are not usually expected to be
numbered.

In other words, the typical behavior expected from format-patch is the
one obtained by enabling autonumber, so we set it to be the default.

Users that want to disable numbering for a particular patchset can do
so with the existing -N command-line switch.  Users that want to
change the default behavior can use the format.numbering config key.

Signed-off-by: Brian Gernhardt <benji@silverinsanity.com>
Test-updates-by: Jeff King <peff@peff.net>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDo not rename read-only files during a push
Petr Baudis [Fri, 3 Oct 2008 10:20:43 +0000 (12:20 +0200)]
Do not rename read-only files during a push

Win32 does not allow renaming read-only files (at least on a Samba
share), making push into a local directory to fail. Thus, defer
the chmod() call in index-pack.c:final() only after
move_temp_to_file() was called.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
15 years agoMerge branch 'pb/commit-where'
Junio C Hamano [Sat, 18 Oct 2008 14:07:23 +0000 (07:07 -0700)]
Merge branch 'pb/commit-where'

* pb/commit-where:
  tutorial: update output of git commit
  reformat informational commit message
  git commit: Reformat output somewhat
  builtin-commit.c: show on which branch a commit was added

15 years agomake alloc_ref_from_str() the new alloc_ref()
René Scharfe [Sat, 18 Oct 2008 08:44:18 +0000 (10:44 +0200)]
make alloc_ref_from_str() the new alloc_ref()

With all calls to alloc_ref() gone, we can remove it and then we're free
to give alloc_ref_from_str() the shorter name.  It's a much nicer
interface, as the callers always need to have a name string when they
allocate a ref anyway and don't need to calculate and pass its length+1
any more.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agouse alloc_ref_from_str() everywhere
René Scharfe [Sat, 18 Oct 2008 08:41:33 +0000 (10:41 +0200)]
use alloc_ref_from_str() everywhere

Replace pairs of alloc_ref() and strcpy() with alloc_ref_from_str(),
simplifying the code.

In connect.c, also a pair of alloc_ref() and memcpy() is replaced --
the additional cost of a strlen() call should not have too much of an
impact.  Consistency and simplicity are more important.

In remote.c, the code was allocating 11 bytes more than needed for
the name part, but I couldn't see them being used for anything.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoadd alloc_ref_with_prefix()
René Scharfe [Sat, 18 Oct 2008 08:37:40 +0000 (10:37 +0200)]
add alloc_ref_with_prefix()

In three cases in remote.c, a "raw" ref is allocated using alloc_ref()
and then its is constructed using sprintf().  Clean it up by adding a
helper function, alloc_ref_with_prefix(), which creates a composite
name.  Use it in alloc_ref_from_str(), too, as it simplifies the code.

Open code alloc_ref() in alloc_ref_with_prefix(), as the former is
going to be removed in the patch after the next.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agocontrib: update packinfo.pl to not use dashed commands
Dan McGee [Sat, 18 Oct 2008 02:41:18 +0000 (21:41 -0500)]
contrib: update packinfo.pl to not use dashed commands

Signed-off-by: Dan McGee <dpmcgee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoforce_object_loose: Fix memory leak
Björn Steinbrink [Sat, 18 Oct 2008 00:37:31 +0000 (02:37 +0200)]
force_object_loose: Fix memory leak

read_packed_sha1 expectes its caller to free the buffer it returns, which
force_object_loose didn't do.

This leak is eventually triggered by "git gc", when it is manually invoked
or there are too many packs around, making gc totally unusable when there
are lots of unreachable objects.

Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de>
Acked-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoindex-pack: smarter memory usage during delta resolution
Nicolas Pitre [Fri, 17 Oct 2008 19:57:58 +0000 (15:57 -0400)]
index-pack: smarter memory usage during delta resolution

There is no need to keep the base object data around after its last delta
has been resolved.  This also means that long delta chains with only one
delta per base won't grow the cache size unnecessarily as the base will
be freed before recursing down.

To make it easy, find_delta_children() is modified so the first and last
indices are initialized in all cases.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoindex-pack: rationalize delta resolution code
Nicolas Pitre [Fri, 17 Oct 2008 19:57:57 +0000 (15:57 -0400)]
index-pack: rationalize delta resolution code

Instead of having strange loops for walking unresolved deltas with the
same base duplicated in many places, let's rework the code so this is
done in a single place instead.  This simplifies callers quite a bit too.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogitk: Regenerate .po files
Paul Mackerras [Sat, 18 Oct 2008 05:24:46 +0000 (16:24 +1100)]
gitk: Regenerate .po files

This is the result of running make update-po and removing or fixing
the strings that were fuzzily matched.  The ones that were fixed were
the ones where the only change was "git rev-list" to "git log", and
the "about gitk" message where the copyright year got updated.

To get xgettext to see the menu labels as needing translation, it
was necessary for arrange for them to be preceded by "mc".  This
therefore changes makemenu to ignore the first element in each
menu item so that it can be "mc" in the makemenu call.

Signed-off-by: Paul Mackerras <paulus@samba.org>
15 years agoFix "checkout --track -b newbranch" on detached HEAD
Junio C Hamano [Fri, 17 Oct 2008 06:37:44 +0000 (23:37 -0700)]
Fix "checkout --track -b newbranch" on detached HEAD

The test to make sure that checkout fails when --track was asked for and
we cannot set up tracking information in t7201 was wrong, and it turns out
that the implementation for that feature itself was buggy.  This fixes it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'jk/maint-ls-files-other' into jk/fix-ls-files-other
Junio C Hamano [Fri, 17 Oct 2008 20:03:52 +0000 (13:03 -0700)]
Merge branch 'jk/maint-ls-files-other' into jk/fix-ls-files-other

* jk/maint-ls-files-other:
  refactor handling of "other" files in ls-files and status

Conflicts:
read-cache.c

15 years agorefactor handling of "other" files in ls-files and status
Jeff King [Thu, 16 Oct 2008 15:07:26 +0000 (11:07 -0400)]
refactor handling of "other" files in ls-files and status

When the "git status" display code was originally converted
to C, we copied the code from ls-files to discover whether a
pathname returned by read_directory was an "other", or
untracked, file.

Much later, 5698454e updated the code in ls-files to handle
some new cases caused by gitlinks.  This left the code in
wt-status.c broken: it would display submodule directories
as untracked directories. Nobody noticed until now, however,
because unless status.showUntrackedFiles was set to "all",
submodule directories were not actually reported by
read_directory. So the bug was only triggered in the
presence of a submodule _and_ this config option.

This patch pulls the ls-files code into a new function,
cache_name_is_other, and uses it in both places. This should
leave the ls-files functionality the same and fix the bug
in status.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agodescribe: Make --tags and --all match lightweight tags more often
Shawn O. Pearce [Mon, 13 Oct 2008 14:39:46 +0000 (07:39 -0700)]
describe: Make --tags and --all match lightweight tags more often

If the caller supplies --tags they want the lightweight, unannotated
tags to be searched for a match.  If a lightweight tag is closer
in the history, it should be matched, even if an annotated tag is
reachable further back in the commit chain.

The same applies with --all when matching any other type of ref.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Acked-By: Uwe Kleine-König <ukleinek@strlen.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agotests: shell negation portability fix
Jeff King [Mon, 13 Oct 2008 09:35:59 +0000 (05:35 -0400)]
tests: shell negation portability fix

Commit 969c8775 introduced a test which uses the non-portable construct:

  command1 && ! command2 | command3

which must be

  command1 && ! (command2 | command3)

to work on bsd shells (this is another example of bbf08124, which fixed
several similar cases).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agopull: allow "git pull origin $something:$current_branch" into an unborn branch
Junio C Hamano [Tue, 14 Oct 2008 22:32:20 +0000 (15:32 -0700)]
pull: allow "git pull origin $something:$current_branch" into an unborn branch

Some misguided documents floating on the Net suggest this sequence:

    mkdir newdir && cd newdir
    git init
    git remote add origin $url
    git pull origin master:master

"git pull" has known about misguided "pull" that lets the underlying fetch
update the current branch for a long time.  It also has known about
"git pull origin master" into a branch yet to be born.

These two workarounds however were not aware of the existence of each
other and did not work well together.  This fixes it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogitk: New way of constructing menus that allows for Alt+letter accelerators
Paul Mackerras [Fri, 17 Oct 2008 11:44:42 +0000 (22:44 +1100)]
gitk: New way of constructing menus that allows for Alt+letter accelerators

This is inspired by patches from Robin Rosenberg but takes a different
approach.  This adds a "makemenu" procedure for constructing menus
that allows the menu layout to be specified in a clear fashion, and
provides one place where the alt+letter accelerators can be detected
and handled.

The alt+letter accelerator is specified by putting an ampersand (&)
before the letter for the accelerator in the menu item name.  (Two
ampersands in succession produce one ampersand in the menu item as
it appears on screen.)  This is handled in makemenu.

We also add an mca procedure which is like mc but also does the
ampersand translation, for use when we want to refer to a menu item
by name.  The mca name and the locations where we use it were
shamelessly stolen from Robin Rosenberg's patch.

This doesn't actually add any alt+letter accelerators yet.

Signed-off-by: Paul Mackerras <paulus@samba.org>
15 years agoMerge branch 'maint'
Junio C Hamano [Fri, 17 Oct 2008 08:52:32 +0000 (01:52 -0700)]
Merge branch 'maint'

* maint:
  t1301-shared-repo.sh: don't let a default ACL interfere with the test
  git-check-attr(1): add output and example sections
  xdiff-interface.c: strip newline (and cr) from line before pattern matching
  t4018-diff-funcname: demonstrate end of line funcname matching flaw
  t4018-diff-funcname: rework negated last expression test
  Typo "does not exists" when git remote update remote.
  remote.c: correct the check for a leading '/' in a remote name
  Add testcase to ensure merging an early part of a branch is done properly

Conflicts:
t/t7600-merge.sh

15 years agot1301-shared-repo.sh: don't let a default ACL interfere with the test
Matt McCutchen [Fri, 17 Oct 2008 02:32:14 +0000 (22:32 -0400)]
t1301-shared-repo.sh: don't let a default ACL interfere with the test

This test creates files with several different umasks and expects their
permissions to be initialized according to the umask, so a default ACL on the
trash directory (which overrides the umask for files created in that directory)
causes the test to fail.  To avoid that, remove the default ACL if possible with
setfacl(1).

Signed-off-by: Matt McCutchen <matt@mattmccutchen.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agorebase-i-p: if todo was reordered use HEAD as the rewritten parent
Stephen Haberman [Wed, 15 Oct 2008 07:44:40 +0000 (02:44 -0500)]
rebase-i-p: if todo was reordered use HEAD as the rewritten parent

This seems like the best guess we can make until git sequencer marks are
available. That being said, within the context of re-ordering a commit before
its parent in todo, I think applying it on top of the current commit seems like
a reasonable assumption of what the user intended.

Signed-off-by: Stephen Haberman <stephen@exigencecorp.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agorebase-i-p: do not include non-first-parent commits touching UPSTREAM
Stephen Haberman [Wed, 15 Oct 2008 07:44:39 +0000 (02:44 -0500)]
rebase-i-p: do not include non-first-parent commits touching UPSTREAM

This covers an odd boundary case found by Avi Kivity's script where a branch
coming off of UPSTREAM is merged into HEAD. Initially it show up in
UPSTREAM..HEAD, but technically UPSTREAM is not moving, the rest of head is, so
we should not need to rewrite the merge.

This adds a check saying we can keep `preserve=t` if `p=UPSTREAM`...unless this
is the first first-parent commit in our UPSTREAM..HEAD rev-list, which could
very well point to UPSTREAM, but we still need to consider it as rewritten so we
start pulling in the rest of the UPSTREAM..HEAD commits that point to it.

Signed-off-by: Stephen Haberman <stephen@exigencecorp.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agorebase-i-p: only list commits that require rewriting in todo
Stephen Haberman [Wed, 15 Oct 2008 07:44:38 +0000 (02:44 -0500)]
rebase-i-p: only list commits that require rewriting in todo

This is heavily based on Stephan Beyer's git sequencer rewrite of rebase-i-p.

Each commit is still found by rev-list UPSTREAM..HEAD, but a commit is only
included in todo if at least one its parents has been marked for rewriting.

Signed-off-by: Stephen Haberman <stephen@exigencecorp.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agorebase-i-p: fix 'no squashing merges' tripping up non-merges
Stephen Haberman [Wed, 15 Oct 2008 07:44:37 +0000 (02:44 -0500)]
rebase-i-p: fix 'no squashing merges' tripping up non-merges

Also only check out the first parent if this commit if not a squash--if it is a
squash, we want to explicitly ignore the parent and leave the wc as is, as
cherry-pick will apply the squash on top of it.

Signed-off-by: Stephen Haberman <stephen@exigencecorp.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agorebase-i-p: delay saving current-commit to REWRITTEN if squashing
Stephen Haberman [Wed, 15 Oct 2008 07:44:36 +0000 (02:44 -0500)]
rebase-i-p: delay saving current-commit to REWRITTEN if squashing

If the current-commit was dumped to REWRITTEN, but then we squash the next
commit in to it, we have invalidated the HEAD was just written to REWRITTEN.
Instead, append the squash hash to current-commit and save both of them the next
time around.

Signed-off-by: Stephen Haberman <stephen@exigencecorp.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agorebase-i-p: use HEAD for updating the ref instead of mapping OLDHEAD
Stephen Haberman [Wed, 15 Oct 2008 07:44:35 +0000 (02:44 -0500)]
rebase-i-p: use HEAD for updating the ref instead of mapping OLDHEAD

If OLDHEAD was reordered in the todo, and its mapped NEWHEAD was used to set the
ref, commits reordered after OLDHEAD in the todo would should up as un-committed
changes.

Signed-off-by: Stephen Haberman <stephen@exigencecorp.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>