gitweb.git
relative_path should honor dos-drive-prefixJiang Xin Mon, 14 Oct 2013 02:29:39 +0000 (10:29 +0800)

relative_path should honor dos-drive-prefix

Tvangeste found that the "relative_path" function could not work
properly on Windows if "in" and "prefix" have DOS drive prefix
(such as "C:/windows"). ($gmane/234434)

E.g., When execute: test-path-utils relative_path "C:/a/b" "D:/x/y",
should return "C:/a/b", but returns "../../C:/a/b", which is wrong.

So make relative_path honor DOS drive prefix, and add test cases
for it in t0060.

Reported-by: Tvangeste <i.4m.l33t@yandex.ru>
Helped-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>

test: use unambigous leading path (/foo) for MSYSJiang Xin Mon, 14 Oct 2013 02:29:38 +0000 (10:29 +0800)

test: use unambigous leading path (/foo) for MSYS

In test cases for relative_path, path with one leading character
(such as /a, /x) may be recogonized as "a:/" or "x:/" if there is
such DOS drive on MSYS platform. Use an umambigous leading path
"/foo" instead.

Also change two leading slashes (//) to three leading slashes (///),
otherwize it will be recognized as UNC name on MSYS platform.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Acked-by: Sebastian Schuberth <sschuberth@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>

documentation: clarify notes for clean.requireForceJiang Xin Wed, 28 Aug 2013 01:28:32 +0000 (09:28 +0800)

documentation: clarify notes for clean.requireForce

Add "-i" (interactive clean option) to clarify the documentation for
"clean.requireForce" config variable.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-clean: implement partial matching for selectionJiang Xin Wed, 24 Jul 2013 02:22:04 +0000 (10:22 +0800)

git-clean: implement partial matching for selection

Document for interactive git-clean says: "You also could say `c` or
`clean` above as long as the choice is unique". But it's not true,
because only hotkey `c` and full match (`clean`) could work.

Implement partial matching via find_unique function to make the
document right.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation/git-clean: fix description for rangeJiang Xin Tue, 23 Jul 2013 22:22:43 +0000 (06:22 +0800)

Documentation/git-clean: fix description for range

The descriptions of "select by numbers" section for interactive
git-clean are borrowed from git-add, and one sentence should be
replaced.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test: run testcases with POSIX absolute paths on WindowsJiang Xin Tue, 25 Jun 2013 15:53:57 +0000 (23:53 +0800)

test: run testcases with POSIX absolute paths on Windows

Some test cases are skipped on Windows by marking with POSIX prereq.
This is because arguments look like absolute paths (such as /a/b)
for regular Windows programs (*.exe executables, no bash scripts)
are changed to Windows paths (like C:/msysgit/a/b).

There is no cygpath nor equivalent on msysGit, but it is easy to
write one. New subcommand "mingw_path" is added in test-path-utils,
so that we can get the expected absolute paths on Windows. E.g.

COMMAND LINE Linux output Windows output
================================== ============ ===============
test-path-utils mingw_path / / C:/msysgit
test-path-utils mingw_path /a/b/ /a/b/ C:/msysgit/a/b/

With this utility, most skipped test cases in t0060 can be turned on
to be tested correctly on Windows.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test: add t7301 for git-clean--interactiveJiang Xin Tue, 25 Jun 2013 15:53:56 +0000 (23:53 +0800)

test: add t7301 for git-clean--interactive

Add test cases for git-clean--interactive.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-clean: add documentation for interactive git-cleanJiang Xin Tue, 25 Jun 2013 15:53:55 +0000 (23:53 +0800)

git-clean: add documentation for interactive git-clean

Add new section "Interactive mode" for documentation of interactive
git-clean.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Helped-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-clean: add ask each interactive actionJiang Xin Tue, 25 Jun 2013 15:53:54 +0000 (23:53 +0800)

git-clean: add ask each interactive action

Add a new action for interactive git-clean: ask each. It's just like
the "rm -i" command, that the user must confirm one by one for each
file or directory to be cleaned.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-clean: add select by numbers interactive actionJiang Xin Tue, 25 Jun 2013 15:53:53 +0000 (23:53 +0800)

git-clean: add select by numbers interactive action

Draw a multiple choice menu using `list_and_choose` to select items
to be deleted by numbers.

User can input:

* 1,5-7 : select 1,5,6,7 items to be deleted
* * : select all items to be deleted
* -* : unselect all, nothing will be deleted
* : (empty) finish selecting, and return back to main menu

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-clean: add filter by pattern interactive actionJiang Xin Tue, 25 Jun 2013 15:53:52 +0000 (23:53 +0800)

git-clean: add filter by pattern interactive action

Add a new action for interactive git-clean: filter by pattern. When the
user chooses this action, user can input space-separated patterns (the
same syntax as gitignore), and each clean candidate that matches with
one of the patterns will be excluded from cleaning. When the user feels
it's OK, presses ENTER and backs to the confirmation dialog.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-clean: use a git-add-interactive compatible UIJiang Xin Tue, 25 Jun 2013 15:53:51 +0000 (23:53 +0800)

git-clean: use a git-add-interactive compatible UI

Rewrite menu using a new method `list_and_choose`, which is borrowed
from `git-add--interactive.perl`. We will use this framework to add
new actions for interactive git-clean later.

Please NOTE:

* Method `list_and_choose` return an array of integers, and
* it is up to you to free the allocated memory of the array.
* The array ends with EOF.
* If user pressed CTRL-D (i.e. EOF), no selection returned.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-clean: add colors to interactive git-cleanJiang Xin Tue, 25 Jun 2013 15:53:50 +0000 (23:53 +0800)

git-clean: add colors to interactive git-clean

Show header, help, error messages, and prompt in colors for interactive
git-clean. Re-use config variables, such as "color.interactive" and
"color.interactive.<slot>" for command `git-add--interactive`.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Comments-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-clean: show items of del_list in columnsJiang Xin Tue, 25 Jun 2013 15:53:49 +0000 (23:53 +0800)

git-clean: show items of del_list in columns

When there are lots of items to be cleaned, it is hard to see them all
in one screen. Show them in columns will solve this problem.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Comments-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-clean: add support for -i/--interactiveJiang Xin Tue, 25 Jun 2013 15:53:48 +0000 (23:53 +0800)

git-clean: add support for -i/--interactive

Show what would be done and the user must confirm before actually
cleaning.

Would remove ...
Would remove ...
Would remove ...

Remove [y/n]?

Press "y" to start cleaning, and press "n" if you want to abort.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-clean: refactor git-clean into two phasesJiang Xin Tue, 25 Jun 2013 15:53:47 +0000 (23:53 +0800)

git-clean: refactor git-clean into two phases

Before introducing interactive git-clean, refactor git-clean operations
into two phases:

* hold cleaning items in del_list,
* and remove them in a separate loop at the end.

We will introduce interactive git-clean between the two phases. The
interactive git-clean will show what would be done and must confirm
before do real cleaning.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

write_name{_quoted_relative,}(): remove redundant param... Jiang Xin Tue, 25 Jun 2013 15:53:46 +0000 (23:53 +0800)

write_name{_quoted_relative,}(): remove redundant parameters

After substitute path_relative() in quote.c with relative_path()
from path.c, parameters (such as len and prefix_len) are redundant
in function write_name() and write_name_quoted_relative(). The
callers have already been audited that the strings they pass are
properly NUL terminated and the length they give are the length of
the string (or -1 that asks the length to be counted by the callee).

Remove these now-redundant parameters.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

quote_path_relative(): remove redundant parameterJiang Xin Tue, 25 Jun 2013 15:53:45 +0000 (23:53 +0800)

quote_path_relative(): remove redundant parameter

quote_path_relative() used to take a counted string as its parameter
(the string to be quoted). With an earlier change, it now uses
relative_path() that does not take a counted string, and we have
been passing only the pointer to the string since then.

Remove the length parameter from quote_path_relative() to show that
this parameter was redundant. All the changed lines show that the
caller passed either -1 (to ask the function run strlen() on the
string), or the length of the string, so the earlier conversion was
safe.

All the callers of quote_path_relative() that used to take counted string
have been audited to make sure that they are passing length of the actual
string (or -1 to ask the callee run strlen())

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

quote.c: substitute path_relative with relative_pathJiang Xin Tue, 25 Jun 2013 15:53:44 +0000 (23:53 +0800)

quote.c: substitute path_relative with relative_path

Substitute the function path_relative in quote.c with the function
relative_path. Function relative_path can be treated as an enhanced
and more robust version of path_relative.

Outputs of path_relative and it's replacement (relative_path) are the
same for the following cases:

path prefix output of path_relative output of relative_path
======== ========= ======================= =======================
/a/b/c/ /a/b/ c/ c/
/a/b/c /a/b/ c c
/a/ /a/b/ ../ ../
/ /a/b/ ../../ ../../
/a/c /a/b/ ../c ../c
/x/y /a/b/ ../../x/y ../../x/y
a/b/c/ a/b/ c/ c/
a/ a/b/ ../ ../
x/y a/b/ ../../x/y ../../x/y
/a/b (empty) /a/b /a/b
/a/b (null) /a/b /a/b
a/b (empty) a/b a/b
a/b (null) a/b a/b

But if both of the path and the prefix are the same, or the returned
relative path should be the current directory, the outputs of both
functions are different. Function relative_path returns "./", while
function path_relative returns empty string.

path prefix output of path_relative output of relative_path
======== ========= ======================= =======================
/a/b/ /a/b/ (empty) ./
a/b/ a/b/ (empty) ./
(empty) (null) (empty) ./
(empty) (empty) (empty) ./

But the callers of path_relative can handle such cases, or never
encounter this issue at all, because:

* In function quote_path_relative, if the output of path_relative is
empty, append "./" to it, like:

if (!out->len)
strbuf_addstr(out, "./");

* Another caller is write_name_quoted_relative, which is only used
by builtin/ls-files.c. git-ls-files only show files, so path of
files will never be identical with the prefix of a directory.

The following differences show that path_relative does not handle
extra slashes properly:

path prefix output of path_relative output of relative_path
======== ========= ======================= =======================
/a//b//c/ //a/b// ../../../../a//b//c/ c/
a/b//c a//b ../b//c c

And if prefix has no trailing slash, path_relative does not work
properly either. But since prefix always has a trailing slash, it's
not a problem.

path prefix output of path_relative output of relative_path
======== ========= ======================= =======================
/a/b/c/ /a/b b/c/ c/
/a/b /a/b b ./
/a/b/ /a/b b/ ./
/a /a/b/ ../../a ../
a/b/c/ a/b b/c/ c/
a/b/ a/b b/ ./
a a/b ../a ../
x/y a/b/ ../x/y ../../x/y
a/c a/b c ../c
/a/ /a/b (empty) ../
(empty) /a/b ../../ ./

One tricky part in this conversion is write_name() function in
ls-files.c. It takes a counted string, <name, len>, that is to be
made relative to <prefix, prefix_len> and then quoted. Because
write_name_quoted_relative() still takes these two parameters as
counted string, but ignores the count and treat these two as
NUL-terminated strings, this conversion needs to be audited for its
callers:

- For <name, len>, all three callers of write_name() passes a
NUL-terminated string and its true length, so this patch makes
"len" unused.

- For <prefix, prefix_len>, prefix could be a string that is longer
than empty while prefix_len could be 0 when "--full-name" option
is used. This is fixed by checking prefix_len in write_name()
and calling write_name_quoted_relative() with NULL when
prefix_len is set to 0. Again, this makes "prefix_len" given to
write_name_quoted_relative() unused, without introducing a bug.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

path.c: refactor relative_path(), not only strip prefixJiang Xin Tue, 25 Jun 2013 15:53:43 +0000 (23:53 +0800)

path.c: refactor relative_path(), not only strip prefix

Original design of relative_path() is simple, just strip the prefix
(*base) from the absolute path (*abs).

In most cases, we need a real relative path, such as: ../foo,
../../bar. That's why there is another reimplementation
(path_relative()) in quote.c.

Borrow some codes from path_relative() in quote.c to refactor
relative_path() in path.c, so that it could return real relative
path, and user can reuse this function without reimplementing
his/her own. The function path_relative() in quote.c will be
substituted, and I would use the new relative_path() function when
implementing the interactive git-clean later.

Different results for relative_path() before and after this refactor:

abs path base path relative (original) relative (refactor)
======== ========= =================== ===================
/a/b /a/b . ./
/a/b/ /a/b . ./
/a /a/b/ /a ../
/ /a/b/ / ../../
/a/c /a/b/ /a/c ../c
/x/y /a/b/ /x/y ../../x/y

a/b/ a/b/ . ./
a/b/ a/b . ./
a a/b a ../
x/y a/b/ x/y ../../x/y
a/c a/b a/c ../c

(empty) (null) (empty) ./
(empty) (empty) (empty) ./
(empty) /a/b (empty) ./
(null) (null) (null) ./
(null) (empty) (null) ./
(null) /a/b (segfault) ./

You may notice that return value "." has been changed to "./".
It is because:

* Function quote_path_relative() in quote.c will show the relative
path as "./" if abs(in) and base(prefix) are the same.

* Function relative_path() is called only once (in setup.c), and
it will be OK for the return value as "./" instead of ".".

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

test: add test cases for relative_pathJiang Xin Tue, 25 Jun 2013 15:53:42 +0000 (23:53 +0800)

test: add test cases for relative_path

Add subcommand "relative_path" in test-path-utils, and add test cases
in t0060.

Johannes tested an earlier version of this patch on Windows, and
found that some relative_path tests should be skipped on
Windows. This is because the bash on Windows rewrites arguments of
regular Windows programs, such as git and the test helpers, if the
arguments look like absolute POSIX paths. As a consequence, the
actual tests performed are not what the tests scripts expect.

The tests that need *not* be skipped are those where the two paths passed
to 'test-path-utils relative_path' have the same prefix and the result is
expected to be a relative path. This is because the rewriting changes
"/a/b" to "D:/Src/MSysGit/a/b", and when both inputs are extended the same
way, this just cancels out in the relative path computation.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Helped-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'fc/remote-hg' (early part)Junio C Hamano Wed, 15 May 2013 21:58:56 +0000 (14:58 -0700)

Merge branch 'fc/remote-hg' (early part)

* 'fc/remote-hg' (early part):
remote-hg: update bookmarks when pulling
remote-hg: don't push fake 'master' bookmark
remote-hg: disable forced push by default
remote-hg: fix new branch creation
remote-hg: add new get_config_bool() helper
remote-hg: enable track-branches in hg-git mode
remote-hg: get rid of unused exception checks
remote-hg: trivial cleanups

remote-hg: update bookmarks when pullingFelipe Contreras Tue, 14 May 2013 04:36:31 +0000 (23:36 -0500)

remote-hg: update bookmarks when pulling

Otherwise, the user would never ever see new bookmarks, only the
ones that (s)he initially cloned.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-hg: don't push fake 'master' bookmarkFelipe Contreras Tue, 14 May 2013 04:36:30 +0000 (23:36 -0500)

remote-hg: don't push fake 'master' bookmark

We skip it locally, but not for the remote, so let's do so.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-hg: disable forced push by defaultFelipe Contreras Tue, 14 May 2013 04:36:29 +0000 (23:36 -0500)

remote-hg: disable forced push by default

In certain situations we might end up pushing garbage revisions
(e.g. in a rebase), and the patches to deal with that haven't been
merged yet. So let's disable forced pushes by default.

We are essentially reverting back to the old v1.8.2 behavior, to
minimize the possibility of regressions, but in a way the user can
configure.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-hg: fix new branch creationFelipe Contreras Tue, 14 May 2013 04:36:28 +0000 (23:36 -0500)

remote-hg: fix new branch creation

When a user creates a new branch with git:

% git checkout -b branches/devel

and then pushes this branch

% git push origin branches/devel

which is the way to push new mercurial branches, we do want to
create a branch, but the command would fail without newbranch=True.

This only matters when force_push=False, but setting newbranch=True
unconditionally does not hurt.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-hg: add new get_config_bool() helperFelipe Contreras Tue, 14 May 2013 04:36:27 +0000 (23:36 -0500)

remote-hg: add new get_config_bool() helper

No functional changes.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-hg: enable track-branches in hg-git modeFelipe Contreras Tue, 14 May 2013 04:36:26 +0000 (23:36 -0500)

remote-hg: enable track-branches in hg-git mode

The user can turn this off.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-hg: get rid of unused exception checksFelipe Contreras Tue, 14 May 2013 04:36:25 +0000 (23:36 -0500)

remote-hg: get rid of unused exception checks

Remove try/except check because we are no longer calling
check_output(), which may throw an exception.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-hg: trivial cleanupsFelipe Contreras Tue, 14 May 2013 04:36:24 +0000 (23:36 -0500)

remote-hg: trivial cleanups

Drop unused "global", and remove redundant comparison of two files.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: update old organizationFelipe Contreras Tue, 14 May 2013 04:20:27 +0000 (23:20 -0500)

remote-bzr: update old organization

If a clone exists with the old organization (v1.8.2) it will prevent
the new shared bzr repository organization from working, so let's
remove this repository, which is not used any more.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 1.8.3-rc2 v1.8.3-rc2Junio C Hamano Mon, 13 May 2013 18:09:42 +0000 (11:09 -0700)

Git 1.8.3-rc2

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge git://ozlabs.org/~paulus/gitkJunio C Hamano Mon, 13 May 2013 14:51:41 +0000 (07:51 -0700)

Merge git://ozlabs.org/~paulus/gitk

* git://ozlabs.org/~paulus/gitk:
gitk: On OSX, bring the gitk window to front
gitk: Add support for -G'regex' pickaxe variant
gitk: Add menu item for reverting commits
gitk: Simplify file filtering
gitk: Display the date of a tag in a human-friendly way
gitk: Improve behaviour of drop-down lists
gitk: Move hard-coded colors to .gitk

gitk: On OSX, bring the gitk window to frontTair Sabirgaliev Wed, 24 Apr 2013 09:48:27 +0000 (15:48 +0600)

gitk: On OSX, bring the gitk window to front

On OSX, Tcl/Tk application windows are created behind all
the applications down the stack of windows. This is very
annoying, because once a gitk window appears, it's the
downmost window and switching to it is pain.

The patch is: if we are on OSX, use osascript to
bring the current Wish process window to front.

Signed-off-by: Tair Sabirgaliev <tair.sabirgaliev@gmail.com>
Thanks-to: Stefan Haller <lists@haller-berlin.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>

gitk: Add support for -G'regex' pickaxe variantMartin Langhoff Thu, 14 Jun 2012 18:34:11 +0000 (20:34 +0200)

gitk: Add support for -G'regex' pickaxe variant

git log -G'regex' is a very useful alternative to the classic
pickaxe. Minimal patch to make it usable from gitk.

[zj: reword message]
[paulus@samba.org: reword droplist item]
Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Signed-off-by: Paul Mackerras <paulus@samba.org>

test-bzr: do not use unportable sed '\+'Torsten Bögershausen Sat, 11 May 2013 13:25:52 +0000 (15:25 +0200)

test-bzr: do not use unportable sed '\+'

Using sed -e '/[0-9]\+//' to find "one or more digits" is not
portable.

Use the Basic Regular Expression '/[0-9][0-9]*//' instead.

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge git://git.bogomips.org/git-svnJunio C Hamano Sat, 11 May 2013 18:09:00 +0000 (11:09 -0700)

Merge git://git.bogomips.org/git-svn

* git://git.bogomips.org/git-svn:
git-svn: added an --include-path flag
Git::SVN::*: add missing "NAME" section to perldoc
git-svn: avoid self-referencing mergeinfo

gitk: Add menu item for reverting commitsKnut Franke Sat, 27 Apr 2013 14:36:13 +0000 (16:36 +0200)

gitk: Add menu item for reverting commits

Sometimes it's helpful (at least psychologically) to have this feature
easily accessible. Code borrows heavily from cherrypick.

Signed-off-by: Knut Franke <Knut.Franke@gmx.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>

gitk: Simplify file filteringFelipe Contreras Sat, 27 Apr 2013 22:01:39 +0000 (17:01 -0500)

gitk: Simplify file filtering

git diff is perfectly able to do this with '-- files', no need for
manual filtering. This makes gettreediffs consistent with getblobdiffs.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>

gitk: Display the date of a tag in a human-friendly wayAnand Kumria Mon, 29 Apr 2013 05:20:48 +0000 (06:20 +0100)

gitk: Display the date of a tag in a human-friendly way

By selecting a tag within gitk you can display information about it.
This information is output by using the command

'git cat-file tag <tagid>'

This outputs the *raw* information from the tag, amongst which is the
time - in seconds since the epoch. As useful as that value is, I find it
a lot easier to read and process time which it is something like:

"Mon Dec 31 14:26:11 2012 -0800"

This change will modify the display of tags in gitk like so:

@@ -1,7 +1,7 @@
object 5d417842efeafb6e109db7574196901c4e95d273
type commit
tag v1.8.1
-tagger Junio C Hamano <gitster@pobox.com> 1356992771 -0800
+tagger Junio C Hamano <gitster@pobox.com> Mon Dec 31 14:26:11 2012 -0800

Git 1.8.1
-----BEGIN PGP SIGNATURE-----

Signed-off-by: Anand Kumria <wildfire@progsoc.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>

gitk: Improve behaviour of drop-down listsPaul Mackerras Sat, 11 May 2013 07:08:41 +0000 (17:08 +1000)

gitk: Improve behaviour of drop-down lists

The drop-down lists used for things like the criteria for finding
commits (containing/touching paths/etc.) use a combobox if we are
using the ttk widgets. By default the combobox exports its value
as the selection when it is changed, which is unnecessary, and sometimes
the combobox wouldn't release the selection, which is annoying.

To fix this, we make these comboboxes not export their selection,
and also clear their selection whenever they are changed. This makes
them more like a simple selection of alternatives, improving the look
and feel of gitk.

Signed-off-by: Paul Mackerras <paulus@samba.org>

Sync with v1.8.2.3Junio C Hamano Thu, 9 May 2013 20:32:54 +0000 (13:32 -0700)

Sync with v1.8.2.3

* maint:
Git 1.8.2.3
t5004: avoid using tar for checking emptiness of archive
t5004: ignore pax global header file
mergetools/kdiff3: do not use --auto when diffing
transport-helper: trivial style cleanup

Git 1.8.2.3 v1.8.2.3Junio C Hamano Thu, 9 May 2013 19:37:53 +0000 (12:37 -0700)

Git 1.8.2.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'mv/sequencer-pick-error-diag'Junio C Hamano Thu, 9 May 2013 20:30:19 +0000 (13:30 -0700)

Merge branch 'mv/sequencer-pick-error-diag'

Fix "git cherry-pick $annotated_tag", which was mistakenly rejected.

* mv/sequencer-pick-error-diag:
cherry-pick: picking a tag that resolves to a commit is OK

cherry-pick: picking a tag that resolves to a commit... Junio C Hamano Thu, 9 May 2013 20:27:49 +0000 (13:27 -0700)

cherry-pick: picking a tag that resolves to a commit is OK

Earlier, 21246dbb9e0a (cherry-pick: make sure all input objects are
commits, 2013-04-11) tried to catch an unlikely "git cherry-pick $blob"
as an error, but broke a more important use case to cherry-pick a
tag that points at a commit.

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'tr/copy-revisions-from-stdin' into maintJunio C Hamano Thu, 9 May 2013 19:42:17 +0000 (12:42 -0700)

Merge branch 'tr/copy-revisions-from-stdin' into maint

* tr/copy-revisions-from-stdin:
read_revisions_from_stdin: make copies for handle_revision_arg

t5004: avoid using tar for checking emptiness of archiveRené Scharfe Thu, 9 May 2013 13:13:47 +0000 (15:13 +0200)

t5004: avoid using tar for checking emptiness of archive

Test 2 of t5004 checks if a supposedly empty tar archive really
contains no files. 24676f02 (t5004: fix issue with empty archive test
and bsdtar) removed our commit hash to make it work with bsdtar, but
the test still fails on NetBSD and OpenBSD, which use their own tar
that considers a tar file containing only NULs as broken.

Here's what the different archivers do when asked to create a tar
file without entries:

$ uname -v
NetBSD 6.0.1 (GENERIC)
$ gtar --version | head -1
tar (GNU tar) 1.26
$ bsdtar --version
bsdtar 2.8.4 - libarchive 2.8.4

$ : >zero.tar
$ perl -e 'print "\0" x 10240' >tenk.tar
$ sha1 zero.tar tenk.tar
SHA1 (zero.tar) = da39a3ee5e6b4b0d3255bfef95601890afd80709
SHA1 (tenk.tar) = 34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c

$ : | tar cf - -T - | sha1
da39a3ee5e6b4b0d3255bfef95601890afd80709
$ : | gtar cf - -T - | sha1
34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c
$ : | bsdtar cf - -T - | sha1
34e163be8e43c5631d8b92e9c43ab0bf0fa62b9c

So NetBSD's native tar creates an empty file, while GNU tar and bsdtar
both give us 10KB of NULs -- just like git archive with an empty tree.
Now let's see how the archivers handle these two kinds of empty tar
files:

$ tar tf zero.tar; echo $?
tar: Unexpected EOF on archive file
1
$ gtar tf zero.tar; echo $?
gtar: This does not look like a tar archive
gtar: Exiting with failure status due to previous errors
2
$ bsdtar tf zero.tar; echo $?
0

$ tar tf tenk.tar; echo $?
tar: Cannot identify format. Searching...
tar: End of archive volume 1 reached
tar: Sorry, unable to determine archive format.
1
$ gtar tf tenk.tar; echo $?
0
$ bsdtar tf tenk.tar; echo $?
0

NetBSD's tar complains about both, bsdtar happily accepts any of them
and GNU tar doesn't like zero-length archive files. So the safest
course of action is to stay with our block-of-NULs format which is
compatible with GNU tar and bsdtar, as we can't make NetBSD's native
tar happy anyway.

We can simplify our test, however, by taking tar out of the picture.
Instead of extracting the archive and checking for the non-presence of
files, check if the file has a size of 10KB and contains only NULs.
This makes t5004 pass on NetBSD and OpenBSD.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

t5004: ignore pax global header fileRené Scharfe Thu, 9 May 2013 13:10:48 +0000 (15:10 +0200)

t5004: ignore pax global header file

Versions of tar that don't know pax headers -- like the ones in NetBSD 6
and OpenBSD 5.2 -- extract them as regular files. Explicitly ignore the
file created for our global header when checking the list of extracted
files, as this is normal and harmless fall-back behaviour. This fixes
test 3 of t5004 on these platforms.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

mergetools/kdiff3: do not use --auto when diffingDavid Aguilar Thu, 9 May 2013 09:13:28 +0000 (02:13 -0700)

mergetools/kdiff3: do not use --auto when diffing

The `kdiff3 --auto` help message is, "No GUI if all conflicts are auto-
solvable." This flag was carried over from the original mergetool
commands. diff_cmd() is for two-way comparisons only so remove the
superfluous flag.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

transport-helper: trivial style cleanupFelipe Contreras Thu, 9 May 2013 01:16:56 +0000 (20:16 -0500)

transport-helper: trivial style cleanup

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

git-svn: added an --include-path flagPaul Walmsley Fri, 3 May 2013 23:10:18 +0000 (00:10 +0100)

git-svn: added an --include-path flag

The SVN::Fetcher module is now able to filter for inclusion as well
as exclusion (as used by --ignore-path). Also added tests, documentation
changes and git completion script.

If you have an SVN repository with many top level directories and you
only want a git-svn clone of some of them then using --ignore-path is
difficult as it requires a very long regexp. In this case it's much
easier to filter for inclusion.

[ew: remove trailing whitespace]

Signed-off-by: Paul Walmsley <pjwhams@gmail.com>
Signed-off-by: Eric Wong <normalperson@yhbt.net>

Git::SVN::*: add missing "NAME" section to perldocJonathan Nieder Sun, 5 May 2013 07:50:33 +0000 (00:50 -0700)

Git::SVN::*: add missing "NAME" section to perldoc

lexgrog(1) relies on the NAME section to find a manpage's subject's
name and description for easy access later using "man -k". Add the
section it expects.

Noticed using lintian.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Eric Wong <normalperson@yhbt.net>

git-svn: avoid self-referencing mergeinfoMichael Contreras Sat, 30 Mar 2013 22:06:42 +0000 (18:06 -0400)

git-svn: avoid self-referencing mergeinfo

When svn.pushmergeinfo is set, the target branch is included in the
mergeinfo if it was previously merged into one of the source branches.
SVN does not do this.

Remove merge target branch path from resulting mergeinfo when
svn.pushmergeinfo is set to better match the behavior of SVN. Update the
svn-mergeinfo-push test.

[ew: 80 columns]

Signed-off-by: Michael Contreras <michael@inetric.com>
Reported-by: Avishay Lavie <avishay.lavie@gmail.com>
Acked-by: Eric Wong <normalperson@yhbt.net>

Update draft release notes for 1.8.3Junio C Hamano Wed, 8 May 2013 05:50:05 +0000 (22:50 -0700)

Update draft release notes for 1.8.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-helpers: trivial cleanupFelipe Contreras Tue, 7 May 2013 23:45:15 +0000 (18:45 -0500)

remote-helpers: trivial cleanup

The comment was copied from hg-fast-export, not used anymore.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: fix for disappeared revisionsFelipe Contreras Tue, 7 May 2013 23:39:35 +0000 (18:39 -0500)

remote-bzr: fix for disappeared revisions

It's possible that the previous tip goes away, we should not assume it's
always present. Fortunately we are only using it to calculate the
progress to display to the user, so only that needs to be fixed.

Also, add a test that triggers this issue.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge git://github.com/git-l10n/git-poJunio C Hamano Wed, 8 May 2013 01:24:31 +0000 (18:24 -0700)

Merge git://github.com/git-l10n/git-po

* git://github.com/git-l10n/git-po:
l10n: zh_CN.po: translate 44 messages (2080t0f0u)
l10n: de.po: translate 44 new messages
l10n: Update Vietnamese translation (2080t0f0u)
l10n: Update Swedish translation (2080t0f0u)
l10n: git.pot: v1.8.3 round 2 (44 new, 12 removed)

l10n: zh_CN.po: translate 44 messages (2080t0f0u)Jiang Xin Sat, 13 Apr 2013 02:02:43 +0000 (10:02 +0800)

l10n: zh_CN.po: translate 44 messages (2080t0f0u)

Translate 44 new messages came from git.pot update in c6bc7d4
(l10n: git.pot: v1.8.3 round 2 (44 new, 12 removed))

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>

l10n: de.po: translate 44 new messagesRalf Thielow Tue, 30 Apr 2013 05:38:05 +0000 (07:38 +0200)

l10n: de.po: translate 44 new messages

Translate 44 new messages came from git.pot update in
c6bc7d4 (l10n: git.pot: v1.8.3 round 2 (44 new, 12 removed)).

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Acked-by: Thomas Rast <trast@inf.ethz.ch>

Merge branch 'jk/merge-tree-added-identically'Junio C Hamano Tue, 7 May 2013 05:18:25 +0000 (22:18 -0700)

Merge branch 'jk/merge-tree-added-identically'

* jk/merge-tree-added-identically:
merge-tree: handle directory/empty conflict correctly

merge-tree: handle directory/empty conflict correctlyJohn Keeping Mon, 6 May 2013 15:20:54 +0000 (16:20 +0100)

merge-tree: handle directory/empty conflict correctly

git-merge-tree causes a null pointer dereference when a directory
entry exists in only one or two of the three trees being compared with
no corresponding entry in the other tree(s).

When this happens, we want to handle the entry as a directory and not
attempt to mark it as a file merge. Do this by setting the entries bit
in the directory mask when the entry is missing or when it is a
directory, only performing the file comparison when we know that a file
entry exists.

Reported-by: Andreas Jacobsen <andreas@andreasjacobsen.com>
Signed-off-by: John Keeping <john@keeping.me.uk>
Tested-by: Andreas Jacobsen <andreas@andreasjacobsen.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'fc/remote-bzr'Junio C Hamano Tue, 7 May 2013 05:16:26 +0000 (22:16 -0700)

Merge branch 'fc/remote-bzr'

* fc/remote-bzr:
remote-bzr: avoid bad refs
remote-bzr: convert all unicode keys to str
remote-bzr: access branches only when needed
remote-bzr: delay peer branch usage
remote-bzr: iterate revisions properly
remote-bzr: improve progress reporting
remote-bzr: add option to specify branches
remote-bzr: add custom method to find branches
remote-bzr: improve author sanitazion
remote-bzr: add support for shared repo
remote-bzr: fix branch names
remote-bzr: add support for bzr repos
remote-bzr: use branch variable when appropriate
remote-bzr: fix partially pushed merge
remote-bzr: fixes for branch diverge
remote-bzr: add support to push merges
remote-bzr: always try to update the worktree
remote-bzr: fix order of locking in CustomTree
remote-bzr: delay blob fetching until the very end
remote-bzr: cleanup CustomTree

remote-bzr: avoid bad refsFelipe Contreras Sat, 4 May 2013 00:31:07 +0000 (19:31 -0500)

remote-bzr: avoid bad refs

Versions of fast-export before v1.8.2 throws a bad 'reset' commands
because of a behavior in transport-helper that is not even needed.
We should ignore them, otherwise we will treat them as branches and
fail.

This was fixed in v1.8.2, but some people use this script in older
versions of git.

Also, check if the ref was a tag, and skip it for now.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: convert all unicode keys to strFelipe Contreras Sat, 4 May 2013 00:31:06 +0000 (19:31 -0500)

remote-bzr: convert all unicode keys to str

Otherwise some versions of bazaar might barf.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'fc/push-with-export-reporting-result'Junio C Hamano Sun, 5 May 2013 18:12:12 +0000 (11:12 -0700)

Merge branch 'fc/push-with-export-reporting-result'

* fc/push-with-export-reporting-result:
transport-helper: improve push messages

transport-helper: improve push messagesFelipe Contreras Fri, 3 May 2013 23:41:59 +0000 (18:41 -0500)

transport-helper: improve push messages

If there's already a remote-helper tracking ref, we can fetch the
SHA-1 to report proper push messages (as opposed to always reporting
[new branch]).

The remote-helper currently can specify the old SHA-1 to avoid this
problem, but there's no point in forcing all remote-helpers to be aware
of git commit ids; they should be able to be agnostic of them.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Git 1.8.3-rc1 v1.8.3-rc1Junio C Hamano Fri, 3 May 2013 22:23:45 +0000 (15:23 -0700)

Git 1.8.3-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'tr/unpack-entry-use-after-free-fix'Junio C Hamano Fri, 3 May 2013 22:18:04 +0000 (15:18 -0700)

Merge branch 'tr/unpack-entry-use-after-free-fix'

* tr/unpack-entry-use-after-free-fix:
unpack_entry: avoid freeing objects in base cache

Sync with maintJunio C Hamano Fri, 3 May 2013 22:17:38 +0000 (15:17 -0700)

Sync with maint

* maint:
completion: zsh: don't override suffix on _detault
Documentation/git-commit: Typo under --edit

Merge branch 'tr/remote-tighten-commandline-parsing... Junio C Hamano Fri, 3 May 2013 22:12:38 +0000 (15:12 -0700)

Merge branch 'tr/remote-tighten-commandline-parsing' into maint

* tr/remote-tighten-commandline-parsing:
remote: 'show' and 'prune' can take more than one remote
remote: check for superfluous arguments in 'git remote add'
remote: add a test for extra arguments, according to docs

Merge branch 'jn/glossary-revision' into maintJunio C Hamano Fri, 3 May 2013 22:12:16 +0000 (15:12 -0700)

Merge branch 'jn/glossary-revision' into maint

* jn/glossary-revision:
glossary: a revision is just a commit

completion: zsh: don't override suffix on _detaultFelipe Contreras Fri, 3 May 2013 21:35:50 +0000 (16:35 -0500)

completion: zsh: don't override suffix on _detault

zsh is smart enough to add the right suffix while completing, there's no
point in trying to do the same as bash.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation/git-commit: Typo under --editAnders Granskogen Bjørnstad Thu, 2 May 2013 18:24:15 +0000 (20:24 +0200)

Documentation/git-commit: Typo under --edit

-C takes a commit object, not a file.

Signed-off-by: Anders Granskogen Bjørnstad <andersgb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Update draft release notes to 1.8.3Junio C Hamano Wed, 1 May 2013 22:32:24 +0000 (15:32 -0700)

Update draft release notes to 1.8.3

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Fix grammar in the 1.8.3 release notes.Marc Branchaud Mon, 29 Apr 2013 19:15:04 +0000 (15:15 -0400)

Fix grammar in the 1.8.3 release notes.

Signed-off-by: Marc Branchaud <marcnarc@xiplink.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

Merge branch 'hb/git-pm-tempfile'Junio C Hamano Wed, 1 May 2013 22:24:15 +0000 (15:24 -0700)

Merge branch 'hb/git-pm-tempfile'

* hb/git-pm-tempfile:
Git.pm: call tempfile from File::Temp as a regular function

Merge branch 'rs/pp-user-info-without-extra-allocation'Junio C Hamano Wed, 1 May 2013 22:24:08 +0000 (15:24 -0700)

Merge branch 'rs/pp-user-info-without-extra-allocation'

* rs/pp-user-info-without-extra-allocation:
pretty: remove intermediate strbufs from pp_user_info()
pretty: simplify output line length calculation in pp_user_info()
pretty: simplify input line length calculation in pp_user_info()

Merge branch 'tr/remote-tighten-commandline-parsing'Junio C Hamano Wed, 1 May 2013 22:24:01 +0000 (15:24 -0700)

Merge branch 'tr/remote-tighten-commandline-parsing'

* tr/remote-tighten-commandline-parsing:
remote: 'show' and 'prune' can take more than one remote
remote: check for superfluous arguments in 'git remote add'
remote: add a test for extra arguments, according to docs

Merge branch 'zk/prompt-rebase-step'Junio C Hamano Wed, 1 May 2013 22:23:56 +0000 (15:23 -0700)

Merge branch 'zk/prompt-rebase-step'

* zk/prompt-rebase-step:
bash-prompt.sh: show where rebase is at when stopped

Merge remote-tracking branch 'vi-vnwildman/master'Jiang Xin Wed, 1 May 2013 11:49:18 +0000 (19:49 +0800)

Merge remote-tracking branch 'vi-vnwildman/master'

* vi-vnwildman/master:
l10n: Update Vietnamese translation (2080t0f0u)

l10n: Update Vietnamese translation (2080t0f0u)Tran Ngoc Quan Wed, 1 May 2013 07:29:03 +0000 (14:29 +0700)

l10n: Update Vietnamese translation (2080t0f0u)

Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>

remote-bzr: access branches only when neededFelipe Contreras Wed, 1 May 2013 01:10:10 +0000 (20:10 -0500)

remote-bzr: access branches only when needed

Bazaar doesn't seem to be tested for multiple usage of branches, so
resources seem to be leaked all over. Let's try to minimize this by
accessing the Branch objects only when needed.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: delay peer branch usageFelipe Contreras Wed, 1 May 2013 01:10:09 +0000 (20:10 -0500)

remote-bzr: delay peer branch usage

So it doesn't time out.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: iterate revisions properlyFelipe Contreras Wed, 1 May 2013 01:10:08 +0000 (20:10 -0500)

remote-bzr: iterate revisions properly

This way we don't need to store the list of all the revisions, which
doesn't seem to be very memory efficient with bazaar's design, for
whatever reason.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: improve progress reportingFelipe Contreras Wed, 1 May 2013 01:10:07 +0000 (20:10 -0500)

remote-bzr: improve progress reporting

No need to manually count the revisions, and also, this would help to
iterate more properly.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: add option to specify branchesFelipe Contreras Wed, 1 May 2013 01:10:06 +0000 (20:10 -0500)

remote-bzr: add option to specify branches

We might not want all the branches. And branch handling in bazaar is
rather tricky, so it's safer to simply specify them.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: add custom method to find branchesFelipe Contreras Wed, 1 May 2013 01:10:05 +0000 (20:10 -0500)

remote-bzr: add custom method to find branches

The official method is incredibly inefficient and slow.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: improve author sanitazionFelipe Contreras Wed, 1 May 2013 01:10:04 +0000 (20:10 -0500)

remote-bzr: improve author sanitazion

So that we don't end up with '<None>', and also synchronize it with the
one from remote-hg.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: add support for shared repoFelipe Contreras Wed, 1 May 2013 01:10:03 +0000 (20:10 -0500)

remote-bzr: add support for shared repo

This way all the remotes share the same data, so adding multiple
remotes, or renaming them doesn't create extra overhead.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: fix branch namesFelipe Contreras Wed, 1 May 2013 01:10:02 +0000 (20:10 -0500)

remote-bzr: fix branch names

When branches have '/' in their name (aka. sub-branches), bazaar seems
to choke while creating the new directory.

Also, git cannot have both 'foo' and 'foo/bar'.

So let's replace slashes with a plus sign.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: add support for bzr reposFelipe Contreras Wed, 1 May 2013 01:10:01 +0000 (20:10 -0500)

remote-bzr: add support for bzr repos

In bazaar, a repository can contain multiple branches, and previously we
were supporting only one branch at a time. Now we fetch them all.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: use branch variable when appropriateFelipe Contreras Wed, 1 May 2013 01:10:00 +0000 (20:10 -0500)

remote-bzr: use branch variable when appropriate

There should be no functional changes. Basically we want to reserve the
'repo' variable.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: fix partially pushed mergeFelipe Contreras Wed, 1 May 2013 01:09:59 +0000 (20:09 -0500)

remote-bzr: fix partially pushed merge

If part of the merge was already pushed, we don't have the blob_marks
available, however, the commits are already stored in bazaar, so we can
use the revision_tree to fetch the contents.

We want to do this only when there's no other option.

There's no easy way to test this.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: fixes for branch divergeFelipe Contreras Wed, 1 May 2013 01:09:58 +0000 (20:09 -0500)

remote-bzr: fixes for branch diverge

If the branches diverge we want to reset the pointer to where the remote
actually is. Since we can access remote branches just as easily as local
ones, let's do so.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: add support to push mergesFelipe Contreras Wed, 1 May 2013 01:09:57 +0000 (20:09 -0500)

remote-bzr: add support to push merges

In order to do that, we need to store the marks of every file, so that
they can be fetched when needed. Unfortunately we can't tell bazaar that
nothing changed, we need to send the data so that it can figure it out
by itself.

And since it will be requesting a bunch of information by the file_id,
it's better to have a helper dict (rev_files), so that we can fetch it
quickly.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: always try to update the worktreeFelipe Contreras Wed, 1 May 2013 01:09:56 +0000 (20:09 -0500)

remote-bzr: always try to update the worktree

And fail properly when we can't.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: fix order of locking in CustomTreeFelipe Contreras Wed, 1 May 2013 01:09:55 +0000 (20:09 -0500)

remote-bzr: fix order of locking in CustomTree

It doesn't seem to make any difference, but revision_tree() requires a
lock.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: delay blob fetching until the very endFelipe Contreras Wed, 1 May 2013 01:09:54 +0000 (20:09 -0500)

remote-bzr: delay blob fetching until the very end

Might be more efficient, but the real reason to use the marks will be
revealed in upcoming patches.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

remote-bzr: cleanup CustomTreeFelipe Contreras Wed, 1 May 2013 01:09:53 +0000 (20:09 -0500)

remote-bzr: cleanup CustomTree

This code was not used at all.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

unpack_entry: avoid freeing objects in base cacheThomas Rast Tue, 30 Apr 2013 12:53:06 +0000 (14:53 +0200)

unpack_entry: avoid freeing objects in base cache

In the !delta_data error path of unpack_entry(), we run free(base).
This became a window for use-after-free() in abe601b (sha1_file:
remove recursion in unpack_entry, 2013-03-27), as follows:

Before abe601b, we got the 'base' from cache_or_unpack_entry(..., 0);
keep_cache=0 tells it to also remove that entry. So the 'base' is at
this point not cached, and freeing it in the error path is the right
thing.

After abe601b, the structure changed: we use a three-phase approach
where phase 1 finds the innermost base or a base that is already in
the cache. In phase 3 we therefore know that all bases we unpack are
not part of the delta cache yet. (Observe that we pop from the cache
in phase 1, so this is also true for the very first base.) So we make
no further attempts to look up the bases in the cache, and just call
add_delta_base_cache() on every base object we have assembled.

But the !delta_data error path remained unchanged, and now calls
free() on a base that has already been entered in the cache. This
means that there is a use-after-free if we later use the same base
again.

So remove that free(); we are still going to use that data.

Reported-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Thomas Rast <trast@inf.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>