Code

git.git
13 years agogit-remote-testgit: import non-HEAD refs
Jeff King [Sat, 16 Jul 2011 13:03:25 +0000 (15:03 +0200)]
git-remote-testgit: import non-HEAD refs

Upon receiving an "import" command, the testgit remote
helper would ignore the ref asked for by git and generate a
fast-export stream based on HEAD. Instead, we should
actually give git the ref it asked for.

This requires adding a new parameter to the export_repo
method in the remote-helpers python library, which may be
used by code outside of git.git. We use a default parameter
so that callers without the new parameter will get the same
behavior as before.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot5800: document some non-functional parts of remote helpers
Jeff King [Sat, 16 Jul 2011 13:03:24 +0000 (15:03 +0200)]
t5800: document some non-functional parts of remote helpers

These are all things one might expect to work in a helper
that is capable of handling multiple branches (which our
testgit helper in theory should be able to do, as it is
backed by git). All of these bugs are specific to the
import/export codepaths, so they don't affect helpers like
git-remote-curl that use fetch/push commands.

The first and fourth tests are about fetching and pushing
new refs, and demonstrate bugs in the git_remote_helpers
library (so they would be most likely to impact helpers for
other VCSs which import/export git).

The second test is about importing multiple refs; it
demonstrates a bug in git-remote-testgit, which is mostly
for exercising the test code. Therefore it probably doesn't
affect anyone in practice.

The third test demonstrates a bug in git's side of the
helper code when the upstream has added refs that we do not
have locally. This could impact git users who use remote
helpers to access foreign VCSs.

All of those bugs have fixes later in this series.

The fifth test is the most complex, and does not have a fix
in this series. It tests pushing a ref via the export
mechanism to a new name on the remote side (i.e.,
"git push $remote old:new").

The problem is that we push all of the work of generating
the export stream onto fast-export, but we have no way of
communicating to fast-export that this name mapping is
happening. So we tell fast-export to generate a stream with
the commits for "old", but we can't tell it to label them
all as "new".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot5800: use skip_all instead of prereq
Sverre Rabbelier [Sat, 16 Jul 2011 13:03:23 +0000 (15:03 +0200)]
t5800: use skip_all instead of prereq

All tests require python 2.4 or higher.

Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot5800: factor out some ref tests
Jeff King [Sat, 16 Jul 2011 13:03:22 +0000 (15:03 +0200)]
t5800: factor out some ref tests

These are a little hard to read, and I'm about to add more
just like them. Plus the failure output is nicer if we use
test_cmp than a comparison with "test".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agotransport-helper: fix minor leak in push_refs_with_export
Jeff King [Sat, 16 Jul 2011 13:03:21 +0000 (15:03 +0200)]
transport-helper: fix minor leak in push_refs_with_export

Signed-off-by: Sverre Rabbelier <srabbelier@gmail.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoUpdate draft release notes to 1.7.7
Junio C Hamano [Tue, 19 Jul 2011 17:44:51 +0000 (10:44 -0700)]
Update draft release notes to 1.7.7

The second batch of topics for this cycle are now in.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'jc/index-pack'
Junio C Hamano [Tue, 19 Jul 2011 16:54:51 +0000 (09:54 -0700)]
Merge branch 'jc/index-pack'

* jc/index-pack:
  verify-pack: use index-pack --verify
  index-pack: show histogram when emulating "verify-pack -v"
  index-pack: start learning to emulate "verify-pack -v"
  index-pack: a miniscule refactor
  index-pack --verify: read anomalous offsets from v2 idx file
  write_idx_file: need_large_offset() helper function
  index-pack: --verify
  write_idx_file: introduce a struct to hold idx customization options
  index-pack: group the delta-base array entries also by type

Conflicts:
builtin/verify-pack.c
cache.h
sha1_file.c

13 years agoMerge branch 'jn/mime-type-with-params'
Junio C Hamano [Tue, 19 Jul 2011 16:45:41 +0000 (09:45 -0700)]
Merge branch 'jn/mime-type-with-params'

* jn/mime-type-with-params:
  gitweb: Serve */*+xml 'blob_plain' as text/plain with $prevent_xss
  gitweb: Serve text/* 'blob_plain' as text/plain with $prevent_xss

13 years agoMerge branch 'jc/submodule-sync-no-auto-vivify'
Junio C Hamano [Tue, 19 Jul 2011 16:45:37 +0000 (09:45 -0700)]
Merge branch 'jc/submodule-sync-no-auto-vivify'

* jc/submodule-sync-no-auto-vivify:
  submodule add: always initialize .git/config entry
  submodule sync: do not auto-vivify uninteresting submodule

Conflicts:
git-submodule.sh

13 years agoMerge branch 'jk/archive-tar-filter'
Junio C Hamano [Tue, 19 Jul 2011 16:45:32 +0000 (09:45 -0700)]
Merge branch 'jk/archive-tar-filter'

* jk/archive-tar-filter:
  upload-archive: allow user to turn off filters
  archive: provide builtin .tar.gz filter
  archive: implement configurable tar filters
  archive: refactor file extension format-guessing
  archive: move file extension format-guessing lower
  archive: pass archiver struct to write_archive callback
  archive: refactor list of archive formats
  archive-tar: don't reload default config options
  archive: reorder option parsing and config reading

13 years agoMerge branch 'jn/gitweb-split-header-html'
Junio C Hamano [Tue, 19 Jul 2011 16:45:28 +0000 (09:45 -0700)]
Merge branch 'jn/gitweb-split-header-html'

* jn/gitweb-split-header-html:
  gitweb: Refactor git_header_html

13 years agoMerge branch 'jk/clone-cmdline-config'
Junio C Hamano [Tue, 19 Jul 2011 16:45:24 +0000 (09:45 -0700)]
Merge branch 'jk/clone-cmdline-config'

* jk/clone-cmdline-config:
  clone: accept config options on the command line
  config: make git_config_parse_parameter a public function
  remote: use new OPT_STRING_LIST
  parse-options: add OPT_STRING_LIST helper

13 years agoMerge branch 'jk/maint-config-param'
Junio C Hamano [Tue, 19 Jul 2011 16:45:21 +0000 (09:45 -0700)]
Merge branch 'jk/maint-config-param'

* jk/maint-config-param:
  config: use strbuf_split_str instead of a temporary strbuf
  strbuf: allow strbuf_split to work on non-strbufs
  config: avoid segfault when parsing command-line config
  config: die on error in command-line config
  fix "git -c" parsing of values with equals signs
  strbuf_split: add a max parameter

13 years agoMerge branch 'jk/tag-list-multiple-patterns'
Junio C Hamano [Tue, 19 Jul 2011 16:45:15 +0000 (09:45 -0700)]
Merge branch 'jk/tag-list-multiple-patterns'

* jk/tag-list-multiple-patterns:
  tag: accept multiple patterns for --list

13 years agoMerge branch 'jc/zlib-wrap'
Junio C Hamano [Tue, 19 Jul 2011 16:33:03 +0000 (09:33 -0700)]
Merge branch 'jc/zlib-wrap'

* jc/zlib-wrap:
  zlib: allow feeding more than 4GB in one go
  zlib: zlib can only process 4GB at a time
  zlib: wrap deflateBound() too
  zlib: wrap deflate side of the API
  zlib: wrap inflateInit2 used to accept only for gzip format
  zlib: wrap remaining calls to direct inflate/inflateEnd
  zlib wrapper: refactor error message formatter

Conflicts:
sha1_file.c

13 years agoMerge branch 'ak/gcc46-profile-feedback'
Junio C Hamano [Tue, 19 Jul 2011 16:32:52 +0000 (09:32 -0700)]
Merge branch 'ak/gcc46-profile-feedback'

* ak/gcc46-profile-feedback:
  Add explanation of the profile feedback build to the README
  Add profile feedback build to git
  Add option to disable NORETURN

13 years agogit-gui: drop the 'n' and 'Shift-n' bindings from the last patch.
Pat Thoyts [Tue, 19 Jul 2011 14:33:34 +0000 (15:33 +0100)]
git-gui: drop the 'n' and 'Shift-n' bindings from the last patch.

The 'n' binding should cause the next match to be selected but results
in the search field gaining focus and additional 'n's being appended.

Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
13 years agogit-gui: Add keyboard shortcuts for search and goto commands in blame view.
David Fries [Sat, 16 Jul 2011 16:59:45 +0000 (11:59 -0500)]
git-gui: Add keyboard shortcuts for search and goto commands in blame view.

Use forward-slash or Control-S to bring up the search dialog.
In the blame view, Enter or 'n' jump to the next selected region while
Shift-Enter or Shift-n will jump to the previous selected region.
Within the search control, hitting Enter will now jump to the next matching
region.

Signed-off-by: David Fries <David@Fries.net>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
13 years agogit-gui: Enable jumping to a specific line number in blame view.
David Fries [Sun, 17 Jul 2011 01:47:14 +0000 (20:47 -0500)]
git-gui: Enable jumping to a specific line number in blame view.

This patch adds a goto control similar to the search control currently
available. The goto control permits the user to specify a line number to
jump to.
When in blame, Control-G is bound to display this control.

Signed-off-by: David Fries <David@Fries.net>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
13 years agoRevert clock-skew based attempt to optimize tag --contains traversal
Junio C Hamano [Thu, 14 Jul 2011 18:02:06 +0000 (11:02 -0700)]
Revert clock-skew based attempt to optimize tag --contains traversal

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoDo not log unless all connect() attempts fail
Dave Zarzycki [Tue, 12 Jul 2011 16:28:34 +0000 (09:28 -0700)]
Do not log unless all connect() attempts fail

IPv6 hosts are often unreachable on the primarily IPv4 Internet and
therefore we shouldn't print an error if there are still other hosts we
can try to connect() to. This helps "git fetch --quiet" stay quiet.

Signed-off-by: Dave Zarzycki <zarzycki@apple.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agorebase: clarify "restore the original branch"
Martin von Zweigbergk [Thu, 14 Jul 2011 03:47:06 +0000 (23:47 -0400)]
rebase: clarify "restore the original branch"

The description for 'git rebase --abort' currently says:

    Restore the original branch and abort the rebase operation.

The "restore" can be misinterpreted to imply that the original branch
was somehow in a broken state during the rebase operation. It is also
not completely clear what "the original branch" is --- is it the
branch that was checked out before the rebase operation was called or
is the the branch that is being rebased (it is the latter)? Although
both issues are made clear in the DESCRIPTION section, let us also
make the entry in the OPTIONS secion more clear.

Also remove the term "rebasing process" from the usage text, since the
user already knows that the text is about "git rebase".

Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agodiff-lib: refactor run_diff_index() and do_diff_cache()
Junio C Hamano [Thu, 14 Jul 2011 01:57:42 +0000 (18:57 -0700)]
diff-lib: refactor run_diff_index() and do_diff_cache()

The latter is meant to be an API for internal callers that want to inspect
the resulting diff-queue, while the former is an implementation of "git
diff-index" command. Extract the common logic into a single helper
function and make them thin wrappers around it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agodiff-lib: simplify do_diff_cache()
Junio C Hamano [Thu, 14 Jul 2011 01:42:32 +0000 (18:42 -0700)]
diff-lib: simplify do_diff_cache()

Since 34110cd (Make 'unpack_trees()' have a separate source and
destination index, 2008-03-06), we can run unpack_trees() without munging
the index at all, but do_diff_cache() tried ever so carefully to work
around the old behaviour of the function.

We can just tell unpack_trees() not to touch the original index and there
is no need to clean-up whatever the previous round has done.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoreset [<commit>] paths...: do not mishandle unmerged paths
Junio C Hamano [Thu, 14 Jul 2011 04:36:29 +0000 (21:36 -0700)]
reset [<commit>] paths...: do not mishandle unmerged paths

Because "diff --cached HEAD" showed an incorrect blob object name on the
LHS of the diff, we ended up updating the index entry with bogus value,
not what we read from the tree.

Noticed by John Nowak.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'js/rebase-typo-branch-squelch-usage'
Junio C Hamano [Wed, 13 Jul 2011 21:31:38 +0000 (14:31 -0700)]
Merge branch 'js/rebase-typo-branch-squelch-usage'

* js/rebase-typo-branch-squelch-usage:
  rebase: do not print lots of usage hints after an obvious error message

13 years agoMerge branch 'jn/doc-dashdash'
Junio C Hamano [Wed, 13 Jul 2011 21:31:37 +0000 (14:31 -0700)]
Merge branch 'jn/doc-dashdash'

* jn/doc-dashdash:
  Documentation/i18n: quote double-dash for AsciiDoc
  Documentation: quote double-dash for AsciiDoc

13 years agoMerge branch 'bc/submodule-foreach-stdin-fix-1.7.4'
Junio C Hamano [Wed, 13 Jul 2011 21:31:37 +0000 (14:31 -0700)]
Merge branch 'bc/submodule-foreach-stdin-fix-1.7.4'

* bc/submodule-foreach-stdin-fix-1.7.4:
  git-submodule.sh: preserve stdin for the command spawned by foreach
  t/t7407: demonstrate that the command called by 'submodule foreach' loses stdin

Conflicts:
git-submodule.sh

13 years agoMerge branch 'nk/ref-doc'
Junio C Hamano [Wed, 13 Jul 2011 21:31:37 +0000 (14:31 -0700)]
Merge branch 'nk/ref-doc'

* nk/ref-doc:
  glossary: clarify description of HEAD
  glossary: update description of head and ref
  glossary: update description of "tag"
  git.txt: de-emphasize the implementation detail of a ref
  check-ref-format doc: de-emphasize the implementation detail of a ref
  git-remote.txt: avoid sounding as if loose refs are the only ones in the world
  git-remote.txt: fix wrong remote refspec

13 years agoMerge branch 'fk/relink-upon-ldflags-update'
Junio C Hamano [Wed, 13 Jul 2011 21:31:37 +0000 (14:31 -0700)]
Merge branch 'fk/relink-upon-ldflags-update'

* fk/relink-upon-ldflags-update:
  Makefile: Track changes to LDFLAGS and relink when necessary

13 years agoMerge branch 'jl/maint-fetch-recursive-fix'
Junio C Hamano [Wed, 13 Jul 2011 21:31:37 +0000 (14:31 -0700)]
Merge branch 'jl/maint-fetch-recursive-fix'

* jl/maint-fetch-recursive-fix:
  fetch: Also fetch submodules in subdirectories in on-demand mode

13 years agoMerge branch 'jc/maint-cygwin-trust-executable-bit-default'
Junio C Hamano [Wed, 13 Jul 2011 21:31:36 +0000 (14:31 -0700)]
Merge branch 'jc/maint-cygwin-trust-executable-bit-default'

* jc/maint-cygwin-trust-executable-bit-default:
  cygwin: trust executable bit by default

13 years agoMerge branch 'aw/rebase-i-p'
Junio C Hamano [Wed, 13 Jul 2011 21:31:36 +0000 (14:31 -0700)]
Merge branch 'aw/rebase-i-p'

* aw/rebase-i-p:
  rebase -i -p: include non-first-parent commits in todo list

13 years agoMerge branch 'rj/config-cygwin'
Junio C Hamano [Wed, 13 Jul 2011 21:31:36 +0000 (14:31 -0700)]
Merge branch 'rj/config-cygwin'

* rj/config-cygwin:
  config.c: Make git_config() work correctly when called recursively
  t1301-*.sh: Fix the 'forced modes' test on cygwin
  help.c: Fix detection of custom merge strategy on cygwin

13 years agoMerge branch 'md/interix-update'
Junio C Hamano [Wed, 13 Jul 2011 21:31:36 +0000 (14:31 -0700)]
Merge branch 'md/interix-update'

* md/interix-update:
  Update the Interix default build configuration.

13 years agoMerge branch 'ln/gitweb-mime-types-split-at-blank'
Junio C Hamano [Wed, 13 Jul 2011 21:31:36 +0000 (14:31 -0700)]
Merge branch 'ln/gitweb-mime-types-split-at-blank'

* ln/gitweb-mime-types-split-at-blank:
  gitweb: allow space as delimiter in mime.types

13 years agoMerge branch 'jc/no-gitweb-test-without-cgi-etc'
Junio C Hamano [Wed, 13 Jul 2011 21:31:36 +0000 (14:31 -0700)]
Merge branch 'jc/no-gitweb-test-without-cgi-etc'

* jc/no-gitweb-test-without-cgi-etc:
  t/gitweb-lib.sh: skip gitweb tests when perl dependencies are not met

13 years agoMerge branch 'fg/submodule-keep-updating'
Junio C Hamano [Wed, 13 Jul 2011 21:31:35 +0000 (14:31 -0700)]
Merge branch 'fg/submodule-keep-updating'

* fg/submodule-keep-updating:
  git-submodule.sh: clarify the "should we die now" logic
  submodule update: continue when a checkout fails
  git-sh-setup: add die_with_status

Conflicts:
git-submodule.sh

13 years agoMerge branch 'jc/legacy-loose-object'
Junio C Hamano [Wed, 13 Jul 2011 21:31:34 +0000 (14:31 -0700)]
Merge branch 'jc/legacy-loose-object'

* jc/legacy-loose-object:
  sha1_file.c: "legacy" is really the current format

13 years agoMerge branch 'an/shallow-doc'
Junio C Hamano [Wed, 13 Jul 2011 21:31:34 +0000 (14:31 -0700)]
Merge branch 'an/shallow-doc'

* an/shallow-doc:
  Document the underlying protocol used by shallow repositories and --depth commands.
  Fix documentation of fetch-pack that implies that the client can disconnect after sending wants.

13 years agoxdiff/xprepare: use a smaller sample size for histogram diff
Tay Ray Chuan [Tue, 12 Jul 2011 06:10:27 +0000 (14:10 +0800)]
xdiff/xprepare: use a smaller sample size for histogram diff

For histogram diff, we can afford a smaller sample size and thus a
poorer estimate of the number of lines, as the hash table (rhash) won't
be filled up/grown. This is safe as the final count of lines (xdf.nrecs)
will be updated correctly anyway by xdl_prepare_ctx().

This gives us a small boost in performance.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoxdiff/xprepare: skip classification
Tay Ray Chuan [Tue, 12 Jul 2011 06:10:26 +0000 (14:10 +0800)]
xdiff/xprepare: skip classification

xdiff performs "classification" of records (xdl_classify_record()),
replacing hashes (xrecord_t.ha) with a unique identifier of the
record/line and building a hash table (xrecord_t.rhash) of records. This
is then used to "cleanup" records (xdl_cleanup_records()).

We don't need any of that in histogram diff, so we omit calls to these
functions. We also skip allocating memory to the hash table, rhash, as
it is no longer used.

This gives us a small boost in performance.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoteach --histogram to diff
Tay Ray Chuan [Tue, 12 Jul 2011 06:10:25 +0000 (14:10 +0800)]
teach --histogram to diff

Port JGit's HistogramDiff algorithm over to C. Rough numbers (TODO) show
that it is faster than its --patience cousin, as well as the default
Meyers algorithm.

The implementation has been reworked to use structs and pointers,
instead of bitmasks, thus doing away with JGit's 2^28 line limit.

We also use xdiff's default hash table implementation (xdl_hash_bits()
with XDL_HASHLONG()) for convenience.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoDocumentation: clearly specify what refs are honored by core.logAllRefUpdates
Bert Wesarg [Mon, 11 Jul 2011 09:14:18 +0000 (11:14 +0200)]
Documentation: clearly specify what refs are honored by core.logAllRefUpdates

The documentation for logging updates in git-update-ref, doesn't make it
clear that only a specific subset of refs are honored by this variable.

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoget_pwd_cwd(): Do not trust st_dev/st_ino blindly
Johannes Schindelin [Sat, 9 Jul 2011 17:38:08 +0000 (19:38 +0200)]
get_pwd_cwd(): Do not trust st_dev/st_ino blindly

10c4c88 (Allow add_path() to add non-existent directories to the path,
2008-07-21) introduced get_pwd_cwd() function in order to favor $PWD when
getenv("PWD") and getcwd() refer to the same directory but are different
strings (e.g. the former gives a nicer looking name via a symbolic link to
an uglier looking automounted path). The function tried to determine if
two directories are the same by running stat(2) on both and comparing
ino/dev fields.

Unfortunately, stat() does not fill any ino or dev fields in msysgit.  But
there is a telltale: both ino and dev are 0 when they are not filled
correctly, so let's be extra cautious.

This happens to fix a bug in "get-receive-pack working_directory/" when
the GIT_DIR would not be set correctly due to absolute_path(".")
returning the wrong value.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Acked-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoref namespaces: documentation
Josh Triplett [Fri, 8 Jul 2011 23:14:10 +0000 (16:14 -0700)]
ref namespaces: documentation

Document the namespace mechanism in a new gitnamespaces(7) page.
Reference it from receive-pack and upload-pack.

Document the new --namespace option and GIT_NAMESPACE environment
variable in git(1), and reference gitnamespaces(7).

Add a sample Apache configuration to http-backend(1) to support
namespaced repositories, and reference gitnamespaces(7).

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoref namespaces: Support remote repositories via upload-pack and receive-pack
Josh Triplett [Fri, 8 Jul 2011 23:13:32 +0000 (16:13 -0700)]
ref namespaces: Support remote repositories via upload-pack and receive-pack

Change upload-pack and receive-pack to use the namespace-prefixed refs
when working with the repository, and use the unprefixed refs when
talking to the client, maintaining the masquerade.  This allows
clone, pull, fetch, and push to work with a suitably configured
GIT_NAMESPACE.

receive-pack advertises refs outside the current namespace as .have refs
(as it currently does for refs in alternates), so that the client can
use them to minimize data transfer but will otherwise ignore them.

With appropriate configuration, this also allows http-backend to expose
namespaces as multiple repositories with different paths.  This only
requires setting GIT_NAMESPACE, which http-backend passes through to
upload-pack and receive-pack.

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoFix tooltip display with multiple monitors on windows.
Pat Thoyts [Mon, 11 Jul 2011 12:55:38 +0000 (13:55 +0100)]
Fix tooltip display with multiple monitors on windows.

On Windows the position of a window may be negative on a monitor to the
left of the primary display. A plus sign is used as the separator between
the width and height and the positional parts of the geometry so always
include the plus sign even for negative positions on this platform.

Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
13 years agoFix typo: existant->existent
Dmitry Ivankov [Thu, 16 Jun 2011 12:22:39 +0000 (18:22 +0600)]
Fix typo: existant->existent

This typo was discovered in core git sources.
Clean in it up in git-gui too.
There is just one occurence in a comment line.

Signed-off-by: Dmitry Ivankov <divanorama@gmail.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
13 years agogit-gui: updated translator README for current procedures.
Pat Thoyts [Thu, 31 Mar 2011 15:24:36 +0000 (16:24 +0100)]
git-gui: updated translator README for current procedures.

We do not have a mob branch and the i18n fork is no longer used. Suggest
translators simply send patches as per other contributors.

Reported-by: Rodrigo Rosenfeld <rr.rosas@gmail.com>
Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
13 years agopack-objects: optimize "recency order"
Junio C Hamano [Thu, 30 Jun 2011 23:21:58 +0000 (16:21 -0700)]
pack-objects: optimize "recency order"

This optimizes the "recency order" (see pack-heuristics.txt in
Documentation/technical/ directory) used to order objects within a
packfile in three ways:

 - Commits at the tip of tags are written together, in the hope that
   revision traversal done in incremental fetch (which starts by
   putting them in a revision queue marked as UNINTERESTING) will see a
   better locality of these objects;

 - In the original recency order, trees and blobs are intermixed. Write
   trees together before blobs, in the hope that this will improve
   locality when running pathspec-limited revision traversal, i.e.
   "git log paths...";

 - When writing blob objects out, write the whole family of blobs that use
   the same delta base object together, by starting from the root of the
   delta chain, and writing its immediate children in a width-first
   manner, in the hope that this will again improve locality when reading
   blobs that belong to the same path, which are likely to be deltified
   against each other.

I tried various workloads in the Linux kernel repositories (HEAD at
v3.0-rc6-71-g4dd1b49) packed with v1.7.6 and with this patch, counting how
large seeks are needed between adjacent accesses to objects in the pack,
and the result looks promising.  The history has 2072052 objects, weighing
some 490MiB.

 * Simple commit-only log.

   $ git log >/dev/null

   There are 254656 commits in total.

                                  v1.7.6  with patch
   Total number of access :      258,031     258,032
          0.0% percentile :           12          12
         10.0% percentile :          259         259
         20.0% percentile :          294         294
         30.0% percentile :          326         326
         40.0% percentile :          363         363
         50.0% percentile :          415         415
         60.0% percentile :          513         513
         70.0% percentile :          857         858
         80.0% percentile :       10,434      10,441
         90.0% percentile :       91,985      91,996
         95.0% percentile :      260,852     260,885
         99.0% percentile :    1,150,680   1,152,811
         99.9% percentile :    3,148,435   3,148,435
       Less than 2MiB seek:       99.70%      99.69%

   95% of the pack accesses look at data that is no further than 260kB
   from the previous location we accessed. The patch does not change the
   order of commit objects very much, and the result is very similar.

 * Pathspec-limited log.

   $ git log drivers/net >/dev/null

   The path is touched by 26551 commits and merges (among 254656 total).

                                  v1.7.6  with patch
   Total number of access :      559,511     558,663
          0.0% percentile :            0           0
         10.0% percentile :          182         167
         20.0% percentile :          259         233
         30.0% percentile :          357         304
         40.0% percentile :          714         485
         50.0% percentile :        5,046       3,976
         60.0% percentile :      688,671     443,578
         70.0% percentile :  319,574,732 110,370,100
         80.0% percentile :  361,647,599 123,707,229
         90.0% percentile :  393,195,669 128,947,636
         95.0% percentile :  405,496,875 131,609,321
         99.0% percentile :  412,942,470 133,078,115
         99.5% percentile :  413,172,266 133,163,349
         99.9% percentile :  413,354,356 133,240,445
       Less than 2MiB seek:       61.71%      62.87%

   With the current pack heuristics, more than 30% of accesses have to
   seek further than 300MB; the updated pack heuristics ensures that less
   than 0.1% of accesses have to seek further than 135MB. This is largely
   due to the fact that the updated heuristics does not mix blobs and
   trees together.

 * Blame.

   $ git blame drivers/net/ne.c >/dev/null

   The path is touched by 34 commits and merges.

                                  v1.7.6  with patch
   Total number of access :      178,147     178,166
          0.0% percentile :            0           0
         10.0% percentile :          142         139
         20.0% percentile :          222         194
         30.0% percentile :          373         300
         40.0% percentile :        1,168         837
         50.0% percentile :       11,248       7,334
         60.0% percentile :  305,121,284 106,850,130
         70.0% percentile :  361,427,854 123,709,715
         80.0% percentile :  388,127,343 128,171,047
         90.0% percentile :  399,987,762 130,200,707
         95.0% percentile :  408,230,673 132,174,308
         99.0% percentile :  412,947,017 133,181,160
         99.5% percentile :  413,312,798 133,220,425
         99.9% percentile :  413,352,366 133,269,051
       Less than 2MiB seek:       56.47%      56.83%

   The result is very similar to the pathspec-limited log above, which
   only looks at the tree objects.

 * Packing recent history.

   $ (git for-each-ref --format='^%(refname)' refs/tags; echo HEAD) |
     git pack-objects --revs --stdout >/dev/null

   This should pack data worth 71 commits.

                                  v1.7.6  with patch
   Total number of access :       11,511      11,514
          0.0% percentile :            0           0
         10.0% percentile :           48          47
         20.0% percentile :          134          98
         30.0% percentile :          332         178
         40.0% percentile :        1,386         293
         50.0% percentile :        8,030         478
         60.0% percentile :       33,676       1,195
         70.0% percentile :      147,268      26,216
         80.0% percentile :    9,178,662     464,598
         90.0% percentile :   67,922,665     965,782
         95.0% percentile :   87,773,251   1,226,102
         99.0% percentile :   98,011,763   1,932,377
         99.5% percentile :  100,074,427  33,642,128
         99.9% percentile :  105,336,398 275,772,650
       Less than 2MiB seek:       77.09%      99.04%

    The long-tail part of the result looks worse with the patch, but
    the change helps majority of the access. 99.04% of the accesses
    need less than 2MiB of seeking, compared to 77.09% with the current
    packing heuristics.

 * Index pack.

   $ git index-pack -v .git/objects/pack/pack*.pack

                                  v1.7.6  with patch
   Total number of access :    2,791,228   2,788,802
          0.0% percentile :            9           9
         10.0% percentile :          140          89
         20.0% percentile :          233         167
         30.0% percentile :          322         235
         40.0% percentile :          464         310
         50.0% percentile :          862         423
         60.0% percentile :        2,566         686
         70.0% percentile :       25,827       1,498
         80.0% percentile :    1,317,862       4,971
         90.0% percentile :   11,926,385     119,398
         95.0% percentile :   41,304,149     952,519
         99.0% percentile :  227,613,070   6,709,650
         99.5% percentile :  321,265,121  11,734,871
         99.9% percentile :  382,919,785  33,155,191
       Less than 2MiB seek:       81.73%      96.92%

   As the index-pack command already walks objects in the delta chain
   order, writing the blobs out in the delta chain order seems to
   drastically improve the locality of access.

Note that a half-a-gigabyte packfile comfortably fits in the buffer cache,
and you would unlikely to see much performance difference on a modern and
reasonably beefy machine with enough memory and local disks. Benchmarking
with cold cache (or over NFS) would be interesting.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agohelp_unknown_cmd: do not propose an "unknown" cmd
Michael Schubert [Fri, 8 Jul 2011 10:08:49 +0000 (12:08 +0200)]
help_unknown_cmd: do not propose an "unknown" cmd

When executing an external shell script like `git foo` with a bad
shebang, e.g. "#!/usr/bin/not/existing", execvp returns 127 (ENOENT).

Since help_unknown_cmd proposes the use of all external commands similar
to the name of the "unknown" command, it suggests the just failed command
again. Stop it and give some advice to the user.

Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Michael Schubert <mschub@elegosoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot4033-diff-patience: factor out tests
Tay Ray Chuan [Thu, 7 Jul 2011 04:23:58 +0000 (12:23 +0800)]
t4033-diff-patience: factor out tests

Group the test cases into two functions, test_diff_(frobnitz|unique).
This in preparation for the histogram diff algorithm, which would also
re-use these test cases.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoxdiff/xpatience: factor out fall-back-diff function
Tay Ray Chuan [Thu, 7 Jul 2011 04:23:57 +0000 (12:23 +0800)]
xdiff/xpatience: factor out fall-back-diff function

This is in preparation for the histogram diff algorithm, which will also
re-use much of the code to call the default Meyers diff algorithm.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoxdiff/xprepare: refactor abort cleanups
Tay Ray Chuan [Thu, 7 Jul 2011 04:23:56 +0000 (12:23 +0800)]
xdiff/xprepare: refactor abort cleanups

Group free()'s that are called when a malloc() fails in
xdl_prepare_ctx(), making for more readable code.

Also add a free() on ha, in case future git hackers add allocs after the
ha malloc.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoxdiff/xprepare: use memset()
Tay Ray Chuan [Thu, 7 Jul 2011 04:23:55 +0000 (12:23 +0800)]
xdiff/xprepare: use memset()

Use memset() instead of a for loop to initialize. This could give a
performance advantage.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agocore: log offset pack data accesses happened
Junio C Hamano [Thu, 7 Jul 2011 02:08:55 +0000 (19:08 -0700)]
core: log offset pack data accesses happened

In a workload other than "git log" (without pathspec nor any option that
causes us to inspect trees and blobs), the recency pack order is said to
cause the access jump around quite a bit. Add a hook to allow us observe
how bad it is.

"git config core.logpackaccess /var/tmp/pal.txt" will give you the log
in the specified file.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoStart 1.7.7 cycle
Junio C Hamano [Thu, 7 Jul 2011 00:00:46 +0000 (17:00 -0700)]
Start 1.7.7 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'maint'
Junio C Hamano [Wed, 6 Jul 2011 23:48:59 +0000 (16:48 -0700)]
Merge branch 'maint'

* maint:
  docs: document --textconv diff option

13 years agoMerge commit 'v1.7.6' into jc/checkout-reflog-fix
Junio C Hamano [Wed, 6 Jul 2011 22:38:28 +0000 (15:38 -0700)]
Merge commit 'v1.7.6' into jc/checkout-reflog-fix

* commit 'v1.7.6': (3211 commits)
  Git 1.7.6
  completion: replace core.abbrevguard to core.abbrev
  Git 1.7.6-rc3
  Documentation: git diff --check respects core.whitespace
  gitweb: 'pickaxe' and 'grep' features requires 'search' to be enabled
  t7810: avoid unportable use of "echo"
  plug a few coverity-spotted leaks
  builtin/gc.c: add missing newline in message
  tests: link shell libraries into valgrind directory
  t/Makefile: pass test opts to valgrind target properly
  sh-i18n--envsubst.c: do not #include getopt.h
  Fix typo: existant->existent
  Git 1.7.6-rc2
  gitweb: do not misparse nonnumeric content tag files that contain a digit
  Git 1.7.6-rc1
  fetch: do not leak a refspec
  t3703: skip more tests using colons in file names on Windows
  gitweb: Fix usability of $prevent_xss
  gitweb: Move "Requirements" up in gitweb/INSTALL
  gitweb: Describe CSSMIN and JSMIN in gitweb/INSTALL
  ...

13 years agoMerge commit 'v1.7.0' into jc/checkout-reflog-fix
Junio C Hamano [Wed, 6 Jul 2011 22:38:18 +0000 (15:38 -0700)]
Merge commit 'v1.7.0' into jc/checkout-reflog-fix

* commit 'v1.7.0': (4188 commits)
  Git 1.7.0
  Fix typo in 1.6.6.2 release notes
  Re-fix check-ref-format documentation mark-up
  archive documentation: attributes are taken from the tree by default
  Documentation: minor fixes to RelNotes-1.7.0
  bash: support 'git am's new '--continue' option
  filter-branch: Fix error message for --prune-empty --commit-filter
  am: switch --resolved to --continue
  Update draft release notes to 1.7.0 one more time
  Git 1.6.6.2
  t8003: check exit code of command and error message separately
  check-ref-format documentation: fix enumeration mark-up
  Documentation: quote braces in {upstream} notation
  t3902: Protect against OS X normalization
  blame: prevent a segv when -L given start > EOF
  git-push: document all the status flags used in the output
  Fix parsing of imap.preformattedHTML and imap.sslverify
  git-add documentation: Fix shell quoting example
  Revert "pack-objects: fix pack generation when using pack_size_limit"
  archive: simplify archive format guessing
  ...

13 years agoMerge commit 'v1.6.0' into jc/checkout-reflog-fix
Junio C Hamano [Wed, 6 Jul 2011 22:37:42 +0000 (15:37 -0700)]
Merge commit 'v1.6.0' into jc/checkout-reflog-fix

* commit 'v1.6.0': (2063 commits)
  GIT 1.6.0
  git-p4: chdir now properly sets PWD environment variable in msysGit
  Improve error output of git-rebase
  t9300: replace '!' with test_must_fail
  Git.pm: Make File::Spec and File::Temp requirement lazy
  Documentation: document the pager.* configuration setting
  git-stash: improve synopsis in help and manual page
  Makefile: building git in cygwin 1.7.0
  git-am: ignore --binary option
  bash-completion: Add non-command git help files to bash-completion
  Fix t3700 on filesystems which do not support question marks in names
  Utilise our new p4_read_pipe and p4_write_pipe wrappers
  Add p4 read_pipe and write_pipe wrappers
  bash completion: Add '--merge' long option for 'git log'
  bash completion: Add completion for 'git mergetool'
  git format-patch documentation: clarify what --cover-letter does
  bash completion: 'git apply' should use 'fix' not 'strip'
  t5304-prune: adjust file mtime based on system time rather than file mtime
  test-parse-options: use appropriate cast in length_callback
  Fix escaping of glob special characters in pathspecs
  ...

Conflicts:
builtin-checkout.c

13 years agocheckout: do not write bogus reflog entry out
Junio C Hamano [Wed, 6 Jul 2011 22:14:43 +0000 (15:14 -0700)]
checkout: do not write bogus reflog entry out

As resolve_ref() returns a static buffer that is local to the function,
the caller needs to be sure that it will not have any other calls to the
function before it uses the returned value, or store it away with a
strdup().  The code used old.path to record which branch it used to be on,
so that it can say between which branches the switch took place in the
reflog, but sometimes it failed to do so.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoDocumentation: use [verse] for SYNOPSIS sections
Martin von Zweigbergk [Sat, 2 Jul 2011 02:38:26 +0000 (22:38 -0400)]
Documentation: use [verse] for SYNOPSIS sections

The SYNOPSIS sections of most commands that span several lines already
use [verse] to retain line breaks. Most commands that don't span
several lines seem not to use [verse]. In the HTML output, [verse]
does not only preserve line breaks, but also makes the section
indented, which causes a slight inconsistency between commands that
use [verse] and those that don't. Use [verse] in all SYNOPSIS sections
for consistency.

Also remove the blank lines from git-fetch.txt and git-rebase.txt to
align with the other man pages. In the case of git-rebase.txt, which
already uses [verse], the blank line makes the [verse] not apply to
the last line, so removing the blank line also makes the formatting
within the document more consistent.

While at it, add single quotes to 'git cvsimport' for consistency with
other commands.

Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoref namespaces: infrastructure
Josh Triplett [Tue, 5 Jul 2011 17:54:44 +0000 (10:54 -0700)]
ref namespaces: infrastructure

Add support for dividing the refs of a single repository into multiple
namespaces, each of which can have its own branches, tags, and HEAD.
Git can expose each namespace as an independent repository to pull from
and push to, while sharing the object store, and exposing all the refs
to operations such as git-gc.

Storing multiple repositories as namespaces of a single repository
avoids storing duplicate copies of the same objects, such as when
storing multiple branches of the same source.  The alternates mechanism
provides similar support for avoiding duplicates, but alternates do not
prevent duplication between new objects added to the repositories
without ongoing maintenance, while namespaces do.

To specify a namespace, set the GIT_NAMESPACE environment variable to
the namespace.  For each ref namespace, git stores the corresponding
refs in a directory under refs/namespaces/.  For example,
GIT_NAMESPACE=foo will store refs under refs/namespaces/foo/.  You can
also specify namespaces via the --namespace option to git.

Note that namespaces which include a / will expand to a hierarchy of
namespaces; for example, GIT_NAMESPACE=foo/bar will store refs under
refs/namespaces/foo/refs/namespaces/bar/.  This makes paths in
GIT_NAMESPACE behave hierarchically, so that cloning with
GIT_NAMESPACE=foo/bar produces the same result as cloning with
GIT_NAMESPACE=foo and cloning from that repo with GIT_NAMESPACE=bar.  It
also avoids ambiguity with strange namespace paths such as
foo/refs/heads/, which could otherwise generate directory/file conflicts
within the refs directory.

Add the infrastructure for ref namespaces: handle the GIT_NAMESPACE
environment variable and --namespace option, and support iterating over
refs in a namespace.

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoFix prefix handling in ref iteration functions
Josh Triplett [Tue, 5 Jul 2011 17:54:21 +0000 (10:54 -0700)]
Fix prefix handling in ref iteration functions

The do_for_each_ref iteration function accepts a prefix and a trim, and
checks for the prefix on each ref before passing in that ref; it also
supports trimming off part of the ref before passing it.  However,
do_for_each_ref used trim as the length of the prefix to check, ignoring
the actual length of the prefix.  Switch to using prefixcmp, checking
the entire length of the prefix string, to properly support a trim value
different than the length of the prefix.

Several callers passed a prefix of "refs/" to filter out everything
outside of refs/, but a trim of 0 to avoid trimming off the "refs/"; the
trim of 0 meant that the filter of "refs/" no longer applied.  Change
these callers to pass an empty prefix instead, to avoid changing the
existing behavior.  Various callers count on this lack of filtering,
such as receive-pack which uses add_extra_ref to add alternates as refs
named ".have"; adding filtering would break that, causing
t5501-fetch-push-alternates.sh to fail.  That lack of filtering doesn't
currently have any other effect, since the loose ref functions can never
supply refs outside of "refs/", and packed-refs will not normally
include such refs unless manually edited.

Signed-off-by: Josh Triplett <josh@joshtriplett.org>
Signed-off-by: Jamey Sharp <jamey@minilop.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agodocs: document --textconv diff option
Jeff King [Wed, 6 Jul 2011 15:13:30 +0000 (11:13 -0400)]
docs: document --textconv diff option

This has been there since textconv existed, but was never
documented. There is some overlap with what's in
gitattributes(5), but it's important to warn in both places
that textconv diffs probably can't be applied.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agomergetool: check return value from read
Junio C Hamano [Fri, 1 Jul 2011 23:11:16 +0000 (16:11 -0700)]
mergetool: check return value from read

The process may not even have the standard input open in which case it
will get stuck in an infinite loop to prompt and read nothing.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agobranch -v: honor core.abbrev
Namhyung Kim [Fri, 1 Jul 2011 06:06:08 +0000 (15:06 +0900)]
branch -v: honor core.abbrev

Use the value from 'core.abbrev' configuration variable unless user
specifies the length on command line when showing commit object name
in "branch -v" output.

Signed-off-by: Namhyung Kim <namhyung@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit skew: a tool to find how big a clock skew exists in the history
Jeff King [Sat, 11 Jun 2011 19:04:11 +0000 (19:04 +0000)]
git skew: a tool to find how big a clock skew exists in the history

> As you probably guessed from the specificity of the number, I wrote a
> short program to actually traverse and find the worst skew. It takes
> about 5 seconds to run (unsurprisingly, since it is doing the same full
> traversal that we end up doing in the above numbers). So we could
> "autoskew" by setting up the configuration on clone, and then
> periodically updating it as part of "git gc".

This patch doesn't implement auto-detection of skew, but is the program
I used to calculate, and would provide the basis for such
auto-detection. It would be interesting to see average skew numbers for
popular repositories. You can run it as "git skew --all".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogitweb: Serve */*+xml 'blob_plain' as text/plain with $prevent_xss
Jakub Narebski [Thu, 30 Jun 2011 09:39:21 +0000 (11:39 +0200)]
gitweb: Serve */*+xml 'blob_plain' as text/plain with $prevent_xss

Enhance usability of 'blob_plain' view protection against XSS attacks
(enabled by setting $prevent_xss to true) by serving contents inline
as safe 'text/plain' mimetype where possible, instead of serving with
"Content-Disposition: attachment" to make sure they don't run in
gitweb's security domain.

This patch broadens downgrading to 'text/plain' further, to any
*/*+xml mimetype.  This includes:

  application/xhtml+xml    (*.xhtml, *.xht)
  application/atom+xml     (*.atom)
  application/rss+xml      (*.rss)
  application/mathml+xm    (*.mathml)
  application/docbook+xml  (*.docbook)
  image/svg+xml            (*.svg, *.svgz)

Probably most useful is serving XHTML files as text/plain in
'blob_plain' view, directly viewable.

Because file with 'image/svg+xml' mimetype can be compressed SVGZ
file, we have to check if */*+xml really is text file, via '-T $fd'.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogitweb: Serve text/* 'blob_plain' as text/plain with $prevent_xss
Jakub Narebski [Thu, 30 Jun 2011 09:39:20 +0000 (11:39 +0200)]
gitweb: Serve text/* 'blob_plain' as text/plain with $prevent_xss

One of mechanism enabled by setting $prevent_xss to true is 'blob_plain'
view protection.  With XSS prevention on, blobs of all types except a
few known safe ones are served with "Content-Disposition: attachment" to
make sure they don't run in our security domain.

Instead of serving text/* type files, except text/plain (and including
text/html), as attachements, downgrade it to text/plain.  This way HTML
pages in 'blob_plain' (raw) view would be displayed in browser, but
safely as a source, and not asked to be saved.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-submodule.sh: preserve stdin for the command spawned by foreach
Brandon Casey [Thu, 30 Jun 2011 00:34:58 +0000 (19:34 -0500)]
git-submodule.sh: preserve stdin for the command spawned by foreach

The user-supplied command spawned by 'submodule foreach' loses its
connection to the original standard input.  Instead, it is connected to the
output of a pipe within the git-submodule script.  The user-supplied
command supplied to 'submodule foreach' is spawned within a while loop
which is being piped into.  Due to the way shells implement piping output
to a while loop, a subshell is created with its standard input attached to
the output of the pipe.  This results in all of the commands executed
within the while loop to have their stdins modified in the same way,
including the user-supplied command.

This can cause a problem if the command requires reading from stdin or if
it changes its behavior based on whether stdin is a tty or not.  For
example, this problem was noticed when trying to execute the following:

   git submodule foreach git shortlog --since=two.weeks.ago

which printed a message about entering the first submodule and produced no
further output and exited with a status of zero.  In this case, shortlog
detected that it was not connected to a tty, and since no revision was
supplied as an argument, it attempted to read the list of revisions from
standard input.  Instead, it slurped up the list of submodules that was
being piped to the enclosing while loop and caused that loop to end early
without processing the remaining submodules.

Work around this behavior by saving the original standard input file
descriptor before the while loop, and restoring it when spawning the
user-supplied command.

This fixes the tests in t7407.

Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agot/t7407: demonstrate that the command called by 'submodule foreach' loses stdin
Brandon Casey [Thu, 30 Jun 2011 00:34:57 +0000 (19:34 -0500)]
t/t7407: demonstrate that the command called by 'submodule foreach' loses stdin

The user-supplied command spawned by 'submodule foreach' loses its
connection to the original standard input.  Instead, it is connected to the
output of a pipe within the git-submodule script.  This can cause a problem
if the command requires reading from stdin or if it changes its behavior
based on whether stdin is a tty or not (e.g. git shortlog).  Demonstrate
this flaw.

Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'jc/streaming-filter' into next
Junio C Hamano [Thu, 30 Jun 2011 00:09:28 +0000 (17:09 -0700)]
Merge branch 'jc/streaming-filter' into next

* jc/streaming-filter:
  t0021: test application of both crlf and ident
  t0021-conversion.sh: fix NoTerminatingSymbolAtEOF test
  streaming: filter cascading
  streaming filter: ident filter
  Add LF-to-CRLF streaming conversion
  stream filter: add "no more input" to the filters
  Add streaming filter API
  convert.h: move declarations for conversion from cache.h

13 years agoMerge branch 'jn/gitweb-js-blame' into next
Junio C Hamano [Thu, 30 Jun 2011 00:09:27 +0000 (17:09 -0700)]
Merge branch 'jn/gitweb-js-blame' into next

* jn/gitweb-js-blame:
  gitweb.js: use setTimeout rather than setInterval in blame_incremental.js
  gitweb.js: No need for loop in blame_incremental's handleResponse()
  gitweb.js: No need for inProgress in blame_incremental.js

13 years agoMerge branch 'da/git-prefix-everywhere' into next
Junio C Hamano [Thu, 30 Jun 2011 00:09:27 +0000 (17:09 -0700)]
Merge branch 'da/git-prefix-everywhere' into next

* da/git-prefix-everywhere:
  t/t7503-pre-commit-hook.sh: Add GIT_PREFIX tests
  git-mergetool--lib: Make vimdiff retain the current directory
  git: Remove handling for GIT_PREFIX
  setup: Provide GIT_PREFIX to built-ins

13 years agoMerge branch 'jc/streaming' into next
Junio C Hamano [Thu, 30 Jun 2011 00:09:27 +0000 (17:09 -0700)]
Merge branch 'jc/streaming' into next

* jc/streaming:
  sha1_file: use the correct type (ssize_t, not size_t) for read-style function
  streaming: read loose objects incrementally
  sha1_file.c: expose helpers to read loose objects
  streaming: read non-delta incrementally from a pack
  streaming_write_entry(): support files with holes
  convert: CRLF_INPUT is a no-op in the output codepath
  streaming_write_entry(): use streaming API in write_entry()
  streaming: a new API to read from the object store
  write_entry(): separate two helper functions out
  unpack_object_header(): make it public
  sha1_object_info_extended(): hint about objects in delta-base cache
  sha1_object_info_extended(): expose a bit more info
  packed_object_info_detail(): do not return a string

13 years agoMerge branch 'ab/i18n-scripts' into next
Junio C Hamano [Thu, 30 Jun 2011 00:09:27 +0000 (17:09 -0700)]
Merge branch 'ab/i18n-scripts' into next

* ab/i18n-scripts: (48 commits)
  i18n: git-bisect bisect_next_check "You need to" message
  i18n: git-bisect [Y/n] messages
  i18n: git-bisect bisect_replay + $1 messages
  i18n: git-bisect bisect_reset + $1 messages
  i18n: git-bisect bisect_run + $@ messages
  i18n: git-bisect die + eval_gettext messages
  i18n: git-bisect die + gettext messages
  i18n: git-bisect echo + eval_gettext message
  i18n: git-bisect echo + gettext messages
  i18n: git-bisect gettext + echo message
  i18n: git-bisect add git-sh-i18n
  i18n: git-stash drop_stash say/die messages
  i18n: git-stash "unknown option" message
  i18n: git-stash die + eval_gettext $1 messages
  i18n: git-stash die + eval_gettext $* messages
  i18n: git-stash die + eval_gettext messages
  i18n: git-stash die + gettext messages
  i18n: git-stash say + gettext messages
  i18n: git-stash echo + gettext message
  i18n: git-stash add git-sh-i18n
  ...

13 years agoMerge branch 'ef/maint-win-verify-path'
Junio C Hamano [Thu, 30 Jun 2011 00:09:17 +0000 (17:09 -0700)]
Merge branch 'ef/maint-win-verify-path'

* ef/maint-win-verify-path:
  verify_dotfile(): do not assume '/' is the path seperator
  verify_path(): simplify check at the directory boundary
  verify_path: consider dos drive prefix
  real_path: do not assume '/' is the path seperator
  A Windows path starting with a backslash is absolute

13 years agoMerge branch 'js/i18n-windows'
Junio C Hamano [Thu, 30 Jun 2011 00:03:13 +0000 (17:03 -0700)]
Merge branch 'js/i18n-windows'

* js/i18n-windows:
  Windows: teach getenv to do a case-sensitive search
  mingw.c: move definition of mingw_getenv down
  sh-i18n--envsubst: do not crash when no arguments are given

13 years agoMerge branch 'rs/grep-color'
Junio C Hamano [Thu, 30 Jun 2011 00:03:13 +0000 (17:03 -0700)]
Merge branch 'rs/grep-color'

* rs/grep-color:
  grep: add --heading
  grep: add --break
  grep: fix coloring of hunk marks between files

13 years agoMerge branch 'jc/maint-1.7.3-checkout-describe'
Junio C Hamano [Thu, 30 Jun 2011 00:03:12 +0000 (17:03 -0700)]
Merge branch 'jc/maint-1.7.3-checkout-describe'

* jc/maint-1.7.3-checkout-describe:
  checkout -b <name>: correctly detect existing branch

13 years agoMerge branch 'db/http-cookies'
Junio C Hamano [Thu, 30 Jun 2011 00:03:12 +0000 (17:03 -0700)]
Merge branch 'db/http-cookies'

* db/http-cookies:
  http: pass http.cookiefile using CURLOPT_COOKIEFILE

13 years agoMerge branch 'jk/maint-1.7.2-status-ignored'
Junio C Hamano [Thu, 30 Jun 2011 00:03:12 +0000 (17:03 -0700)]
Merge branch 'jk/maint-1.7.2-status-ignored'

* jk/maint-1.7.2-status-ignored:
  git status --ignored: tests and docs
  status: fix bug with missing --ignore files

Conflicts:
Documentation/git-status.txt
t/t7508-status.sh

13 years agoMerge branch 'jc/diff-index-quick-exit-early'
Junio C Hamano [Thu, 30 Jun 2011 00:03:11 +0000 (17:03 -0700)]
Merge branch 'jc/diff-index-quick-exit-early'

* jc/diff-index-quick-exit-early:
  diff-index --quiet: learn the "stop feeding the backend early" logic

Conflicts:
unpack-trees.h

13 years agoMerge branch 'mg/diff-stat-count'
Junio C Hamano [Thu, 30 Jun 2011 00:03:10 +0000 (17:03 -0700)]
Merge branch 'mg/diff-stat-count'

* mg/diff-stat-count:
  diff --stat-count: finishing touches
  diff-options.txt: describe --stat-{width,name-width,count}
  diff: introduce --stat-lines to limit the stat lines
  diff.c: omit hidden entries from namelen calculation with --stat

13 years agoMerge branch 'jc/advice-about-to-lose-commit'
Junio C Hamano [Thu, 30 Jun 2011 00:03:10 +0000 (17:03 -0700)]
Merge branch 'jc/advice-about-to-lose-commit'

* jc/advice-about-to-lose-commit:
  checkout: make advice when reattaching the HEAD less loud

Conflicts:
builtin/checkout.c

13 years agoMerge branch 'jk/combine-diff-binary-etc'
Junio C Hamano [Thu, 30 Jun 2011 00:03:10 +0000 (17:03 -0700)]
Merge branch 'jk/combine-diff-binary-etc'

* jk/combine-diff-binary-etc:
  combine-diff: respect textconv attributes
  refactor get_textconv to not require diff_filespec
  combine-diff: handle binary files as binary
  combine-diff: calculate mode_differs earlier
  combine-diff: split header printing into its own function

13 years agoMerge branch 'instaweb' of git://bogomips.org/git-svn
Junio C Hamano [Wed, 29 Jun 2011 23:43:23 +0000 (16:43 -0700)]
Merge branch 'instaweb' of git://bogomips.org/git-svn

* 'instaweb' of git://bogomips.org/git-svn:
  git-instaweb: Check that correct config file exists for (re)start
  git-instaweb: Move all actions at the end of script
  git-instaweb: Use $conf, not $fqgitdir/gitweb/httpd.conf
  git-instaweb: Extract configuring web server into configure_httpd

13 years agoMerge git://bogomips.org/git-svn into maint
Junio C Hamano [Wed, 29 Jun 2011 23:42:41 +0000 (16:42 -0700)]
Merge git://bogomips.org/git-svn into maint

* git://bogomips.org/git-svn:
  git-svn: Correctly handle root commits in mergeinfo ranges
  git-svn: Disambiguate rev-list arguments to improve error message
  git-svn: Demonstrate a bug with root commits in mergeinfo ranges

13 years agoMerge branch 'maint-1.7.5' into maint
Junio C Hamano [Wed, 29 Jun 2011 23:41:55 +0000 (16:41 -0700)]
Merge branch 'maint-1.7.5' into maint

* maint-1.7.5:
  test: skip clean-up when running under --immediate mode
  "branch -d" can remove more than one branches

13 years agotest: skip clean-up when running under --immediate mode
Junio C Hamano [Mon, 27 Jun 2011 18:02:22 +0000 (11:02 -0700)]
test: skip clean-up when running under --immediate mode

Some tests try to be too careful about cleaning themselves up and
do

    test_expect_success description '
        set-up some test refs and/or configuration &&
        test_when_finished "revert the above changes" &&
the real test
    '

Which is nice to make sure that a potential failure would not have
unexpected interaction with the next test. This however interferes when
"the real test" fails and we want to see what is going on, by running the
test with --immediate mode and descending into its trash directory after
the test stops. The precondition to run the real test and cause it to fail
is all gone after the clean-up procedure defined by test_when_finished is
done.

Update test_run_ which is the workhorse of running a test script
called from test_expect_success and test_expect_failure, so that we do not
run clean-up script defined with test_when_finished when a test that is
expected to succeed fails under the --immediate mode.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Acked-by: Jeff King <peff@peff.net>
13 years ago"branch -d" can remove more than one branches
Junio C Hamano [Mon, 27 Jun 2011 22:04:32 +0000 (15:04 -0700)]
"branch -d" can remove more than one branches

Since 03feddd (git-check-ref-format: reject funny ref names, 2005-10-13),
"git branch -d" can take more than one branch names to remove.

The documentation was correct, but the usage string was not.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agorebase: do not print lots of usage hints after an obvious error message
Johannes Sixt [Tue, 28 Jun 2011 12:46:14 +0000 (14:46 +0200)]
rebase: do not print lots of usage hints after an obvious error message

When a non-existent branch was specified to be rebased, the complete
usage information is printed after the error message that carries the
relevant piece of information:

   $ git rebase master topci
   fatal: no such branch: topci
   usage: git rebase [-i] [options] [--onto <newbase>] [<upstream>] [<branch>]
      or: git rebase [-i] [options] --onto <newbase> --root [<branch>]
      or: git-rebase [-i] --continue | --abort | --skip

   Available options are
   [30 lines of usage stripped]

The error message was introduced recently by 4ac5356c (rebase: give a
better error message for bogus branch, 2011-01-27), and the result was
acceptable because the usage text was just two lines. But 45e2acf3
(rebase: define options in OPTIONS_SPEC, 2011-02-28) made things worse
because the usage text is now 35 lines.

Just drop the usage information because it does not add value to the
error message.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoDocumentation/i18n: quote double-dash for AsciiDoc
Jonathan Nieder [Wed, 29 Jun 2011 05:36:48 +0000 (00:36 -0500)]
Documentation/i18n: quote double-dash for AsciiDoc

As explained in v1.7.3-rc0~13^2 (Work around em-dash handling in newer
AsciiDoc, 2010-08-23), if double dashes in names of commands are not
escaped, AsciiDoc renders them as em dashes.

While fixing that, spell the command name as "git sh-i18n--envsubst"
(2 words) instead of emphasizing the name of the binary (one
hyphenated name) and format it in italics.

The double-dash in the title should be escaped, too, to avoid spurious
em dashes in the header:

  .TH "GIT\-SH\-I18N\(emENVSUB" "1" "06/26/2011" "Git 1\&.7\&.6" "Git Manual"

AsciiDoc 8.6.4 with DocBook XSL 1.76.0-RC1 copes fine and writes
"GIT\-SH\-I18N\-\-ENVSUB" even without this change, which is why it
was missed before.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Acked-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agoMerge branch 'jn/maint-doc-dashdash' into jn/doc-dashdash
Junio C Hamano [Wed, 29 Jun 2011 16:25:51 +0000 (09:25 -0700)]
Merge branch 'jn/maint-doc-dashdash' into jn/doc-dashdash

* jn/maint-doc-dashdash:
  Documentation: quote double-dash for AsciiDoc

13 years agoDocumentation: quote double-dash for AsciiDoc
Jonathan Nieder [Wed, 29 Jun 2011 05:35:10 +0000 (00:35 -0500)]
Documentation: quote double-dash for AsciiDoc

AsciiDoc versions since 5.0.6 treat a double-dash surrounded by spaces
(outside of verbatim environments) as a request to insert an em dash.
Such versions also treat the three-character sequence "\--", when not
followed by another dash, as a request to insert two literal minus
signs.  Thus from time to time there have been patches to add
backslashes to AsciiDoc markup to escape double-dashes that are meant
to be represent '--' characters used literally on the command line;
see v1.4.0-rc1~174, Fix up docs where "--" isn't displayed correctly,
2006-05-05, for example.

AsciiDoc 6.0.3 (2005-04-20) made life harder by also treating
double-dashes without surrounding whitespace as markup for an em dash,
though only when formatting for backends other than the manpages
(e.g., HTML).  Many pages needed to be changed to use a backslash
before the "--" in names of command-line flags like "--add" (see
v0.99.6~37, Update tutorial, 2005-08-30).

AsciiDoc 8.3.0 (2008-11-29) refined the em-dash rule to avoid that
requirement.  Double-dashes without surrounding spaces are not
rendered as em dashes any more unless bordered on both sides by
alphanumeric characters.  The unescaped markup for option names (e.g.,
"--add") works fine, and many instances of this style have leaked into
Documentation/; git's HTML documentation contains many spurious em
dashes when formatted by an older toolchain.  (This patch will not
change that.)

The upshot: "--" as an isolated word and in phrases like "git
web--browse" must be escaped if it is not to be rendered as an em dash
by current asciidoc.  Use "\--" to avoid such misformatting in
sentences in which "--" represents a literal double-minus command line
argument that separates options and revs from pathspecs, and use
"{litdd}" in cases where the double-dash is embedded in the command
name.  The latter is just for consistency with v1.7.3-rc0~13^2 (Work
around em-dash handling in newer AsciiDoc, 2010-08-23).

List of lines to fix found by grepping manpages for "(em".

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Improved-by: Junio C Hamano <gitster@pobox.com>
Improved-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
13 years agogit-svn: Correctly handle root commits in mergeinfo ranges
Michael Haggerty [Sat, 18 Jun 2011 06:48:00 +0000 (08:48 +0200)]
git-svn: Correctly handle root commits in mergeinfo ranges

If the bottom of a mergeinfo range is a commit that maps to a git root
commit, then it doesn't have a parent.  In such a case, use git commit
range "$top_commit" rather than "$bottom_commit^..$top_commit".

[ew: line-wrap at 80 columns]

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Acked-by: Eric Wong <normalperson@yhbt.net>
13 years agogit-svn: Disambiguate rev-list arguments to improve error message
Michael Haggerty [Sat, 18 Jun 2011 06:47:59 +0000 (08:47 +0200)]
git-svn: Disambiguate rev-list arguments to improve error message

Add "--" in the "git rev-list" command line so that if there is a bug
and the revisions cannot be found, the error message is a bit less
cryptic.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Acked-by: Eric Wong <normalperson@yhbt.net>