git
12 years agosequencer: factor code out of revert builtin
Ramkumar Ramachandra [Wed, 11 Jan 2012 18:15:57 +0000 (23:45 +0530)] 
sequencer: factor code out of revert builtin

Expose the cherry-picking machinery through a public
sequencer_pick_revisions() (renamed from pick_revisions() in
builtin/revert.c), so that cherry-picking and reverting are special
cases of a general sequencer operation.  The cherry-pick builtin is
now a thin wrapper that does command-line argument parsing before
calling into sequencer_pick_revisions().  In the future, we can write
a new "foo" builtin that calls into the sequencer like:

  memset(&opts, 0, sizeof(opts));
  opts.action = REPLAY_FOO;
  opts.revisions = xmalloc(sizeof(*opts.revs));
  parse_args_populate_opts(argc, argv, &opts);
  init_revisions(opts.revs);
  sequencer_pick_revisions(&opts);

This patch does not intend to make any functional changes.  Check
with:

  $ git blame -s -C HEAD^..HEAD -- sequencer.c | grep -C3 '^[^^]'

Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorevert: prepare to move replay_action to header
Ramkumar Ramachandra [Wed, 11 Jan 2012 18:15:56 +0000 (23:45 +0530)] 
revert: prepare to move replay_action to header

REVERT and CHERRY_PICK and are unsuitable names for an enumerator in a
public interface, because they are generic enough to be likely to
clash with identifiers with other meanings.  Rename to REPLAY_REVERT
and REPLAY_PICK as preparation for exposing them.

Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'rr/revert-cherry-pick'
Junio C Hamano [Thu, 22 Dec 2011 23:30:22 +0000 (15:30 -0800)] 
Merge branch 'rr/revert-cherry-pick'

* rr/revert-cherry-pick:
  t3502, t3510: clarify cherry-pick -m failure
  t3510 (cherry-pick-sequencer): use exit status
  revert: simplify getting commit subject in format_todo()
  revert: tolerate extra spaces, tabs in insn sheet
  revert: make commit subjects in insn sheet optional
  revert: free msg in format_todo()

12 years agoMerge branch 'tr/pty-all'
Junio C Hamano [Thu, 22 Dec 2011 23:30:15 +0000 (15:30 -0800)] 
Merge branch 'tr/pty-all'

* tr/pty-all:
  test-terminal: set output terminals to raw mode

12 years agoMerge branch 'jn/maint-gitweb-utf8-fix'
Junio C Hamano [Thu, 22 Dec 2011 23:30:12 +0000 (15:30 -0800)] 
Merge branch 'jn/maint-gitweb-utf8-fix'

* jn/maint-gitweb-utf8-fix:
  gitweb: Fix fallback mode of to_utf8 subroutine
  gitweb: Output valid utf8 in git_blame_common('data')
  gitweb: esc_html() site name for title in OPML
  gitweb: Call to_utf8() on input string in chop_and_escape_str()

12 years agoUpdate draft release notes to 1.7.9
Junio C Hamano [Thu, 22 Dec 2011 19:43:02 +0000 (11:43 -0800)] 
Update draft release notes to 1.7.9

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'jk/maint-strbuf-missing-init'
Junio C Hamano [Thu, 22 Dec 2011 19:27:31 +0000 (11:27 -0800)] 
Merge branch 'jk/maint-strbuf-missing-init'

* jk/maint-strbuf-missing-init:
  commit, merge: initialize static strbuf

Conflicts:
builtin/merge.c

12 years agoMerge branch 'jc/maint-lf-to-crlf-keep-crlf'
Junio C Hamano [Thu, 22 Dec 2011 19:27:29 +0000 (11:27 -0800)] 
Merge branch 'jc/maint-lf-to-crlf-keep-crlf'

* jc/maint-lf-to-crlf-keep-crlf:
  lf_to_crlf_filter(): resurrect CRLF->CRLF hack

12 years agoMerge branch 'rs/diff-tree-combined-clean-up'
Junio C Hamano [Thu, 22 Dec 2011 19:27:29 +0000 (11:27 -0800)] 
Merge branch 'rs/diff-tree-combined-clean-up'

* rs/diff-tree-combined-clean-up:
  submodule: use diff_tree_combined_merge() instead of diff_tree_combined()
  pass struct commit to diff_tree_combined_merge()
  use struct sha1_array in diff_tree_combined()

12 years agoMerge branch 'jk/maint-push-v-is-verbose'
Junio C Hamano [Thu, 22 Dec 2011 19:27:29 +0000 (11:27 -0800)] 
Merge branch 'jk/maint-push-v-is-verbose'

* jk/maint-push-v-is-verbose:
  make "git push -v" actually verbose

12 years agoMerge branch 'tr/grep-threading'
Junio C Hamano [Thu, 22 Dec 2011 19:27:28 +0000 (11:27 -0800)] 
Merge branch 'tr/grep-threading'

* tr/grep-threading:
  grep: disable threading in non-worktree case
  grep: enable threading with -p and -W using lazy attribute lookup
  grep: load funcname patterns for -W

12 years agoMerge branch 'jk/pretty-reglog-ent'
Junio C Hamano [Thu, 22 Dec 2011 19:27:28 +0000 (11:27 -0800)] 
Merge branch 'jk/pretty-reglog-ent'

* jk/pretty-reglog-ent:
  pretty: give placeholders to reflog identity

12 years agoMerge branch 'jk/follow-rename-score'
Junio C Hamano [Thu, 22 Dec 2011 19:27:27 +0000 (11:27 -0800)] 
Merge branch 'jk/follow-rename-score'

* jk/follow-rename-score:
  use custom rename score during --follow

12 years agoMerge branch 'jk/doc-fsck'
Junio C Hamano [Thu, 22 Dec 2011 19:27:27 +0000 (11:27 -0800)] 
Merge branch 'jk/doc-fsck'

* jk/doc-fsck:
  docs: brush up obsolete bits of git-fsck manpage

Conflicts:
Documentation/git-fsck.txt

12 years agoMerge branch 'nd/war-on-nul-in-commit'
Junio C Hamano [Thu, 22 Dec 2011 19:27:26 +0000 (11:27 -0800)] 
Merge branch 'nd/war-on-nul-in-commit'

* nd/war-on-nul-in-commit:
  commit_tree(): refuse commit messages that contain NULs
  Convert commit_tree() to take strbuf as message
  merge: abort if fails to commit

Conflicts:
builtin/commit.c
commit.c
commit.h

12 years agoMerge branch 'jk/maint-do-not-feed-stdin-to-tests'
Junio C Hamano [Thu, 22 Dec 2011 19:27:25 +0000 (11:27 -0800)] 
Merge branch 'jk/maint-do-not-feed-stdin-to-tests'

* jk/maint-do-not-feed-stdin-to-tests:
  test-lib: redirect stdin of tests

12 years agoMerge branch 'jn/test-cleanup-7006'
Junio C Hamano [Thu, 22 Dec 2011 19:27:24 +0000 (11:27 -0800)] 
Merge branch 'jn/test-cleanup-7006'

* jn/test-cleanup-7006:
  test: errors preparing for a test are not special

12 years agoMerge branch 'ef/setenv-putenv'
Junio C Hamano [Thu, 22 Dec 2011 19:27:24 +0000 (11:27 -0800)] 
Merge branch 'ef/setenv-putenv'

* ef/setenv-putenv:
  compat/setenv.c: error if name contains '='
  compat/setenv.c: update errno when erroring out

12 years agoMerge branch 'jk/git-prompt'
Junio C Hamano [Thu, 22 Dec 2011 19:27:23 +0000 (11:27 -0800)] 
Merge branch 'jk/git-prompt'

* jk/git-prompt:
  contrib: add credential helper for OS X Keychain
  Makefile: OS X has /dev/tty
  Makefile: linux has /dev/tty
  credential: use git_prompt instead of git_getpass
  prompt: use git_terminal_prompt
  add generic terminal prompt function
  refactor git_getpass into generic prompt function
  move git_getpass to its own source file
  imap-send: don't check return value of git_getpass
  imap-send: avoid buffer overflow

Conflicts:
Makefile

12 years agoMerge branch 'jk/http-push-to-empty'
Junio C Hamano [Thu, 22 Dec 2011 19:27:22 +0000 (11:27 -0800)] 
Merge branch 'jk/http-push-to-empty'

* jk/http-push-to-empty:
  remote-curl: don't pass back fake refs

Conflicts:
remote-curl.c

12 years agoSync with v1.7.8.1
Junio C Hamano [Wed, 21 Dec 2011 20:02:39 +0000 (12:02 -0800)] 
Sync with v1.7.8.1

12 years agoGit 1.7.8.1 v1.7.8.1
Junio C Hamano [Wed, 21 Dec 2011 20:02:13 +0000 (12:02 -0800)] 
Git 1.7.8.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'jl/submodule-status-failure-report' into maint
Junio C Hamano [Wed, 21 Dec 2011 19:42:45 +0000 (11:42 -0800)] 
Merge branch 'jl/submodule-status-failure-report' into maint

* jl/submodule-status-failure-report:
  diff/status: print submodule path when looking for changes fails

12 years agoMerge branch 'tr/userdiff-c-returns-pointer' into maint
Junio C Hamano [Wed, 21 Dec 2011 19:42:45 +0000 (11:42 -0800)] 
Merge branch 'tr/userdiff-c-returns-pointer' into maint

* tr/userdiff-c-returns-pointer:
  userdiff: allow * between cpp funcname words

12 years agoMerge branch 'bc/maint-apply-check-no-patch' into maint
Junio C Hamano [Wed, 21 Dec 2011 19:42:45 +0000 (11:42 -0800)] 
Merge branch 'bc/maint-apply-check-no-patch' into maint

* bc/maint-apply-check-no-patch:
  builtin/apply.c: report error on failure to recognize input
  t/t4131-apply-fake-ancestor.sh: fix broken test

12 years agoMerge branch 'cn/maint-lf-to-crlf-filter' into maint
Junio C Hamano [Wed, 21 Dec 2011 19:42:44 +0000 (11:42 -0800)] 
Merge branch 'cn/maint-lf-to-crlf-filter' into maint

* cn/maint-lf-to-crlf-filter:
  lf_to_crlf_filter(): tell the caller we added "\n" when draining
  convert: track state in LF-to-CRLF filter

12 years agoMerge branch 'jk/maint-upload-archive' into maint
Junio C Hamano [Wed, 21 Dec 2011 19:42:44 +0000 (11:42 -0800)] 
Merge branch 'jk/maint-upload-archive' into maint

* jk/maint-upload-archive:
  archive: don't let remote clients get unreachable commits

12 years agoclone: the -o option has nothing to do with <branch>
Carlos Martín Nieto [Wed, 21 Dec 2011 18:14:09 +0000 (18:14 +0000)] 
clone: the -o option has nothing to do with <branch>

It is to give an alternate <name> instead of "origin" to the remote
we are cloning from.

Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agobuiltin/log: remove redundant initialization
Michael Schubert [Wed, 21 Dec 2011 12:05:27 +0000 (13:05 +0100)] 
builtin/log: remove redundant initialization

"abbrev" and "commit_format" in struct rev_info get initialized in
init_revisions - no need to reinit in cmd_log_init_defaults.

Signed-off-by: Michael Schubert <mschub@elegosoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'ms/commit-cc-option-helpstring' into maint
Junio C Hamano [Wed, 21 Dec 2011 18:50:20 +0000 (10:50 -0800)] 
Merge branch 'ms/commit-cc-option-helpstring' into maint

* ms/commit-cc-option-helpstring:
  builtin/commit: add missing '/' in help message

12 years agobuiltin/commit: add missing '/' in help message
Michael Schubert [Wed, 21 Dec 2011 14:56:00 +0000 (15:56 +0100)] 
builtin/commit: add missing '/' in help message

Signed-off-by: Michael Schubert <mschub@elegosoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'maint'
Junio C Hamano [Wed, 21 Dec 2011 00:34:20 +0000 (16:34 -0800)] 
Merge branch 'maint'

* maint:
  builtin/init-db.c: eliminate -Wformat warning on Solaris

12 years agobuiltin/init-db.c: eliminate -Wformat warning on Solaris
Ævar Arnfjörð Bjarmason [Tue, 20 Dec 2011 23:27:41 +0000 (23:27 +0000)] 
builtin/init-db.c: eliminate -Wformat warning on Solaris

On Solaris systems we'd warn about an implicit cast of mode_t when we
printed things out with the %d format. We'd get this warning under GCC
4.6.0 with Solaris headers:

    builtin/init-db.c: In function ‘separate_git_dir’:
    builtin/init-db.c:354:4: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘mode_t’ [-Wformat]

We've been doing this ever since v1.7.4.1-296-gb57fb80. Just work
around this by adding an explicit cast.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'mh/ref-api'
Junio C Hamano [Tue, 20 Dec 2011 21:25:53 +0000 (13:25 -0800)] 
Merge branch 'mh/ref-api'

* mh/ref-api:
  add_ref(): take a (struct ref_entry *) parameter
  create_ref_entry(): extract function from add_ref()
  repack_without_ref(): remove temporary
  resolve_gitlink_ref_recursive(): change to work with struct ref_cache
  Pass a (ref_cache *) to the resolve_gitlink_*() helper functions
  resolve_gitlink_ref(): improve docstring
  get_ref_dir(): change signature
  refs: change signatures of get_packed_refs() and get_loose_refs()
  is_dup_ref(): extract function from sort_ref_array()
  add_ref(): add docstring
  parse_ref_line(): add docstring
  is_refname_available(): remove the "quiet" argument
  clear_ref_array(): rename from free_ref_array()
  refs: rename parameters result -> sha1
  refs: rename "refname" variables
  struct ref_entry: document name member

Conflicts:
cache.h
refs.c

12 years agoMerge branch 'jc/advice-doc'
Junio C Hamano [Tue, 20 Dec 2011 21:25:29 +0000 (13:25 -0800)] 
Merge branch 'jc/advice-doc'

* jc/advice-doc:
  advice: Document that they all default to true

12 years agoMerge branch 'jc/request-pull-show-head-4'
Junio C Hamano [Tue, 20 Dec 2011 21:25:27 +0000 (13:25 -0800)] 
Merge branch 'jc/request-pull-show-head-4'

* jc/request-pull-show-head-4:
  request-pull: do not emit "tag" before the tagname
  request-pull: update the "pull" command generation logic

12 years agoMerge branch 'jc/pull-signed-tag'
Junio C Hamano [Tue, 20 Dec 2011 21:24:12 +0000 (13:24 -0800)] 
Merge branch 'jc/pull-signed-tag'

* jc/pull-signed-tag:
  commit: do not lose mergetag header when not amending

12 years agoMerge branch 'jc/checkout-m-twoway'
Junio C Hamano [Tue, 20 Dec 2011 21:24:08 +0000 (13:24 -0800)] 
Merge branch 'jc/checkout-m-twoway'

* jc/checkout-m-twoway:
  t/t2023-checkout-m.sh: fix use of test_must_fail

12 years agot/t2023-checkout-m.sh: fix use of test_must_fail
Ævar Arnfjörð Bjarmason [Tue, 20 Dec 2011 20:37:45 +0000 (20:37 +0000)] 
t/t2023-checkout-m.sh: fix use of test_must_fail

Change an invocation of test_must_fail() to be inside a
test_expect_success() as is our usual pattern. Having it outside
caused our tests to fail under prove(1) since we wouldn't print a
newline before TAP output:

    CONFLICT (content): Merge conflict in both.txt
    # GETTEXT POISON #ok 2 - -m restores 2-way conflicted+resolved file

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agocommit: do not lose mergetag header when not amending
Junio C Hamano [Tue, 20 Dec 2011 21:20:56 +0000 (13:20 -0800)] 
commit: do not lose mergetag header when not amending

The earlier ed7a42a (commit: teach --amend to carry forward extra headers,
2011-11-08) broke "git merge/pull; edit to fix conflict; git commit"
workflow by forgetting that commit_tree_extended() takes the whole extra
header list.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'tr/cache-tree'
Junio C Hamano [Tue, 20 Dec 2011 20:16:04 +0000 (12:16 -0800)] 
Merge branch 'tr/cache-tree'

* tr/cache-tree:
  t0090: be prepared that 'wc -l' writes leading blanks

12 years agot0090: be prepared that 'wc -l' writes leading blanks
Johannes Sixt [Tue, 20 Dec 2011 08:24:21 +0000 (09:24 +0100)] 
t0090: be prepared that 'wc -l' writes leading blanks

Use 'printf %d $(whatever|wc -l)' so that the shell removes the blanks
for us.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Acked-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoUpdate draft release notes to 1.7.9
Junio C Hamano [Tue, 20 Dec 2011 00:39:54 +0000 (16:39 -0800)] 
Update draft release notes to 1.7.9

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'ab/enable-i18n'
Junio C Hamano [Tue, 20 Dec 2011 00:06:41 +0000 (16:06 -0800)] 
Merge branch 'ab/enable-i18n'

* ab/enable-i18n:
  i18n: add infrastructure for translating Git with gettext

Conflicts:
Makefile

12 years agoMerge branch 'ew/keepalive'
Junio C Hamano [Tue, 20 Dec 2011 00:06:32 +0000 (16:06 -0800)] 
Merge branch 'ew/keepalive'

* ew/keepalive:
  enable SO_KEEPALIVE for connected TCP sockets

12 years agoMerge branch 'jc/checkout-m-twoway'
Junio C Hamano [Tue, 20 Dec 2011 00:06:22 +0000 (16:06 -0800)] 
Merge branch 'jc/checkout-m-twoway'

* jc/checkout-m-twoway:
  checkout_merged(): squelch false warning from some gcc
  Test 'checkout -m -- path'
  checkout -m: no need to insist on having all 3 stages

12 years agoMerge branch 'jk/maint-push-over-dav'
Junio C Hamano [Tue, 20 Dec 2011 00:05:59 +0000 (16:05 -0800)] 
Merge branch 'jk/maint-push-over-dav'

* jk/maint-push-over-dav:
  http-push: enable "proactive auth"
  t5540: test DAV push with authentication

Conflicts:
http.c

12 years agoMerge branch 'jk/fetch-no-tail-match-refs'
Junio C Hamano [Tue, 20 Dec 2011 00:05:55 +0000 (16:05 -0800)] 
Merge branch 'jk/fetch-no-tail-match-refs'

* jk/fetch-no-tail-match-refs:
  connect.c: drop path_match function
  fetch-pack: match refs exactly
  t5500: give fully-qualified refs to fetch-pack
  drop "match" parameter from get_remote_heads

12 years agoMerge branch 'nd/resolve-ref'
Junio C Hamano [Tue, 20 Dec 2011 00:05:50 +0000 (16:05 -0800)] 
Merge branch 'nd/resolve-ref'

* nd/resolve-ref:
  Rename resolve_ref() to resolve_ref_unsafe()
  Convert resolve_ref+xstrdup to new resolve_refdup function
  revert: convert resolve_ref() to read_ref_full()

12 years agoMerge branch 'jn/maint-sequencer-fixes'
Junio C Hamano [Tue, 20 Dec 2011 00:05:45 +0000 (16:05 -0800)] 
Merge branch 'jn/maint-sequencer-fixes'

* jn/maint-sequencer-fixes:
  revert: stop creating and removing sequencer-old directory
  Revert "reset: Make reset remove the sequencer state"
  revert: do not remove state until sequence is finished
  revert: allow single-pick in the middle of cherry-pick sequence
  revert: pass around rev-list args in already-parsed form
  revert: allow cherry-pick --continue to commit before resuming
  revert: give --continue handling its own function

12 years agoMerge branch 'jk/maint-snprintf-va-copy'
Junio C Hamano [Tue, 20 Dec 2011 00:05:38 +0000 (16:05 -0800)] 
Merge branch 'jk/maint-snprintf-va-copy'

* jk/maint-snprintf-va-copy:
  compat/snprintf: don't look at va_list twice

12 years agoMerge branch 'jk/maint-mv'
Junio C Hamano [Tue, 20 Dec 2011 00:05:34 +0000 (16:05 -0800)] 
Merge branch 'jk/maint-mv'

* jk/maint-mv:
  mv: be quiet about overwriting
  mv: improve overwrite warning
  mv: make non-directory destination error more clear
  mv: honor --verbose flag
  docs: mention "-k" for both forms of "git mv"

12 years agoMerge branch 'ci/stripspace-docs'
Junio C Hamano [Tue, 20 Dec 2011 00:05:31 +0000 (16:05 -0800)] 
Merge branch 'ci/stripspace-docs'

* ci/stripspace-docs:
  Update documentation for stripspace

12 years agoMerge branch 'rr/test-chaining'
Junio C Hamano [Tue, 20 Dec 2011 00:05:25 +0000 (16:05 -0800)] 
Merge branch 'rr/test-chaining'

* rr/test-chaining:
  t3401: use test_commit in setup
  t3401: modernize style
  t3040 (subprojects-basic): fix '&&' chaining, modernize style
  t1510 (worktree): fix '&&' chaining
  t3030 (merge-recursive): use test_expect_code
  test: fix '&&' chaining
  t3200 (branch): fix '&&' chaining

12 years agoMerge branch 'tr/cache-tree'
Junio C Hamano [Tue, 20 Dec 2011 00:05:20 +0000 (16:05 -0800)] 
Merge branch 'tr/cache-tree'

* tr/cache-tree:
  reset: update cache-tree data when appropriate
  commit: write cache-tree data when writing index anyway
  Refactor cache_tree_update idiom from commit
  Test the current state of the cache-tree optimization
  Add test-scrap-cache-tree

12 years agoMerge branch 'jk/credentials'
Junio C Hamano [Tue, 20 Dec 2011 00:05:16 +0000 (16:05 -0800)] 
Merge branch 'jk/credentials'

* jk/credentials:
  t: add test harness for external credential helpers
  credentials: add "store" helper
  strbuf: add strbuf_add*_urlencode
  Makefile: unix sockets may not available on some platforms
  credentials: add "cache" helper
  docs: end-user documentation for the credential subsystem
  credential: make relevance of http path configurable
  credential: add credential.*.username
  credential: apply helper config
  http: use credential API to get passwords
  credential: add function for parsing url components
  introduce credentials API
  t5550: fix typo
  test-lib: add test_config_global variant

Conflicts:
strbuf.c

12 years agogitweb: Fix fallback mode of to_utf8 subroutine
Jakub Narebski [Sun, 18 Dec 2011 22:00:58 +0000 (23:00 +0100)] 
gitweb: Fix fallback mode of to_utf8 subroutine

e5d3de5 (gitweb: use Perl built-in utf8 function for UTF-8 decoding.,
2007-12-04) was meant to make gitweb faster by using Perl's internals
(see subsection "Messing with Perl's Internals" in Encode(3pm) manpage)

Simple benchmark confirms that (old = 00f429a, new = this version):

        old  new
  old    -- -65%
  new  189%   --

Unfortunately it made fallback mode of to_utf8 do not work...  except
for default value 'latin1' of $fallback_encoding ('latin1' is Perl
native encoding), which is why it was not noticed for such long time.

utf8::valid(STRING) is an internal function that tests whether STRING
is in a _consistent state_ regarding UTF-8.  It returns true is
well-formed UTF-8 and has the UTF-8 flag on _*or*_ if string is held
as bytes (both these states are 'consistent').  For gitweb the second
option was true, as output from git commands is opened without ':utf8'
layer.

What made it work at all for STRING in 'latin1' encoding is the fact
that utf8:decode(STRING) turns on UTF-8 flag only if source string is
valid UTF-8 and contains multi-byte UTF-8 characters... and that if
string doesn't have UTF-8 flag set it is treated as in native Perl
encoding, i.e.  'latin1' / 'iso-8859-1' (unless native encoding it is
EBCDIC ;-)).  It was ':utf8' layer that actually converted 'latin1'
(no UTF-8 flag == native == 'latin1) to 'utf8'.

Let's make use of the fact that utf8:decode(STRING) returns false if
STRING is invalid as UTF-8 to check whether to enable fallback mode.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agotest-terminal: set output terminals to raw mode
Thomas Rast [Mon, 12 Dec 2011 18:09:14 +0000 (19:09 +0100)] 
test-terminal: set output terminals to raw mode

Not setting them to raw mode causes funny things to happen, such as
\n -> \r\n translation:

  ./test-terminal.perl echo foo | xxd
  0000000: 666f 6f0d 0a                             foo..

(Notice the added 0d.)

To avoid this, set the (pseudo)terminal to raw mode.  Note that the
IO::Pty docs recommend doing it on both master and slave.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Acked-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorequest-pull: do not emit "tag" before the tagname
Junio C Hamano [Mon, 19 Dec 2011 19:59:57 +0000 (11:59 -0800)] 
request-pull: do not emit "tag" before the tagname

The whole point of the recent update to allow "git pull $url $tagname" is
so that the integrator does not have to store the (signed) tag that is
used to convey authenticity to be recorded in the resulting merge in the
local repository's tag namespace.  Asking for a merge be made with "git
pull $url tag $tagname" defeats it.

Note that the request can become ambiguous if the requestor has a branch
with the same name as the tag, but that is not a new problem limited to
pulling. I wouldn't mind if somebody wants to add disambiguation to the
find_matching_ref logic in the script as a separate patch, though.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoremote-curl: don't pass back fake refs
Jeff King [Sat, 17 Dec 2011 10:45:39 +0000 (05:45 -0500)] 
remote-curl: don't pass back fake refs

When receive-pack advertises its list of refs, it generally hides the
capabilities information after a NUL at the end of the first ref.

However, when we have an empty repository, there are no refs, and
therefore receive-pack writes a fake ref "capabilities^{}" with the
capabilities afterwards.

On the client side, git reads the result with get_remote_heads(). We pick
the capabilities from the end of the line, and then call check_ref() to
make sure the ref name is valid. We see that it isn't, and don't bother
adding it to our list of refs.

However, the call to check_ref() is enabled by passing the REF_NORMAL flag
to get_remote_heads. For the regular git transport, we pass REF_NORMAL in
get_refs_via_connect() if we are doing a push (since only receive-pack
uses this fake ref).  But in remote-curl, we never use this flag, and we
accept the fake ref as a real one, passing it back from the helper to the
parent git-push.

Most of the time this bug goes unnoticed, as the fake ref won't match our
refspecs. However, if "--mirror" is used, then we see it as remote cruft
to be pruned, and try to pass along a deletion refspec for it. Of course
this refspec has bogus syntax (because of the ^{}), and the helper
complains, aborting the push.

Let's have remote-curl mirror what the builtin get_refs_via_connect() does
(at least for the case of using git protocol; we can leave the dumb
info/refs reader as it is).

This also fixes pushing with --mirror to a smart-http remote that uses
alternates. The fake ".have" refs the server gives to avoid unnecessary
network transfer has a similar bad interactions with the machinery.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoadvice: Document that they all default to true
Junio C Hamano [Mon, 19 Dec 2011 05:35:01 +0000 (21:35 -0800)] 
advice: Document that they all default to true

By definition, the default value of "advice.*" variables must be true and
they all control various additional help messages that are designed to aid
new users. Setting one to false is to tell Git that the user understands
the nature of the error and does not need the additional verbose help
message.

Also fix the asciidoc markup for linkgit:git-checkout[1] in the
description of the detachedHead advice by removing an excess colon.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agolf_to_crlf_filter(): resurrect CRLF->CRLF hack
Junio C Hamano [Fri, 16 Dec 2011 23:44:18 +0000 (15:44 -0800)] 
lf_to_crlf_filter(): resurrect CRLF->CRLF hack

The non-streaming version of the filter counts CRLF and LF in the whole
buffer, and returns without doing anything when they match (i.e. what is
recorded in the object store already uses CRLF). This was done to help
people who added files from the DOS world before realizing they want to go
cross platform and adding .gitattributes to tell Git that they only want
CRLF in their working tree.

The streaming version of the filter does not want to read the whole thing
before starting to work, as that defeats the whole point of streaming. So
we instead check what byte follows CR whenever we see one, and add CR
before LF only when the LF does not immediately follow CR already to keep
CRLF as is.

Reported-and-tested-by: Ralf Thielow
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogitweb: Output valid utf8 in git_blame_common('data')
Jürgen Kreileder [Sat, 17 Dec 2011 09:22:23 +0000 (10:22 +0100)] 
gitweb: Output valid utf8 in git_blame_common('data')

Otherwise when javascript-actions are enabled gitweb shown broken
author names in the tooltips on blame pages ('blame_incremental'
view).

Signed-off-by: Jürgen Kreileder <jk@blackdown.de>
Acked-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogitweb: esc_html() site name for title in OPML
Jürgen Kreileder [Sat, 17 Dec 2011 09:22:22 +0000 (10:22 +0100)] 
gitweb: esc_html() site name for title in OPML

This escapes the site name in OPML (XML uses the same escaping rules
as HTML).  Also fixes encoding issues because esc_html() uses
to_utf8().

Signed-off-by: Jürgen Kreileder <jk@blackdown.de>
Acked-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogitweb: Call to_utf8() on input string in chop_and_escape_str()
Jürgen Kreileder [Sat, 17 Dec 2011 09:22:21 +0000 (10:22 +0100)] 
gitweb: Call to_utf8() on input string in chop_and_escape_str()

a) To fix the comparison with the chopped string,
   otherwise we compare bytes with characters, as
   chop_str() must run to_utf8() for correct operation
b) To give the title attribute correct encoding;
   we need to mark strings as UTF-8 before outpur

Signed-off-by: Jürgen Kreileder <jk@blackdown.de>
Acked-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoUpdate jk/maint-strbuf-missing-init to builtin/ rename
Junio C Hamano [Sun, 18 Dec 2011 08:27:59 +0000 (00:27 -0800)] 
Update jk/maint-strbuf-missing-init to builtin/ rename

12 years agocommit, merge: initialize static strbuf
Jeff King [Sun, 18 Dec 2011 05:03:22 +0000 (00:03 -0500)] 
commit, merge: initialize static strbuf

Strbufs cannot rely on static all-zero initialization; instead, they must
use STRBUF_INIT to point to the "slopbuf".

Without this patch, "git commit --no-message" segfaults reliably. Fix the
same issue in builtin/merge.c as well.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agosubmodule: use diff_tree_combined_merge() instead of diff_tree_combined()
René Scharfe [Sat, 17 Dec 2011 10:27:19 +0000 (11:27 +0100)] 
submodule: use diff_tree_combined_merge() instead of diff_tree_combined()

Use diff_tree_combined_merge() instead of open-coding it.

Signed-off-by: René Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agopass struct commit to diff_tree_combined_merge()
René Scharfe [Sat, 17 Dec 2011 10:20:07 +0000 (11:20 +0100)] 
pass struct commit to diff_tree_combined_merge()

Instead of passing the hash of a commit and then searching that
same commit in the single caller, simply pass the commit directly.

Signed-off-by: René Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agouse struct sha1_array in diff_tree_combined()
René Scharfe [Sat, 17 Dec 2011 10:15:48 +0000 (11:15 +0100)] 
use struct sha1_array in diff_tree_combined()

Maintaining an array of hashes is easier using sha1_array than
open-coding it.  This patch also fixes a leak of the SHA1 array
in  diff_tree_combined_merge().

Signed-off-by: René Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogit-p4: fix skipSubmitEdit regression
Pete Wyckoff [Sat, 17 Dec 2011 17:39:03 +0000 (12:39 -0500)] 
git-p4: fix skipSubmitEdit regression

Commit 7c766e5 (git-p4: introduce skipSubmitEdit, 2011-12-04)
made it easier to automate submission to p4, but broke the most
common case.

Add a test for when the user really does edit and save the change
template, and fix the bug that causes the test to fail.

Also add a confirmation message when submission is cancelled.

Reported-by: Michael Horowitz <michael.horowitz@ieee.org>
Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agomake "git push -v" actually verbose
Jeff King [Sat, 17 Dec 2011 09:37:15 +0000 (04:37 -0500)] 
make "git push -v" actually verbose

Providing a single "-v" to "git push" currently does
nothing. Giving two flags ("git push -v -v") turns on the
first level of verbosity.

This is caused by a regression introduced in 8afd8dc (push:
support multiple levels of verbosity, 2010-02-24). Before
the series containing 8afd8dc, the verbosity handling for
fetching and pushing was completely separate. Commit bde873c
refactored the verbosity handling out of the fetch side, and
then 8afd8dc converted push to use the refactored code.

However, the fetch and push sides numbered and passed along
their verbosity levels differently. For both, a verbosity
level of "-1" meant "quiet", and "0" meant "default output".
But from there they differed.

For fetch, a verbosity level of "1" indicated to the "fetch"
program that it should make the status table slightly more
verbose, showing up-to-date entries. A verbosity level of
"2" meant that we should pass a verbose flag to the
transport; in the case of fetch-pack, this displays protocol
debugging information.

As a result, the refactored code in bde873c checks for
"verbosity >= 2", and only then passes it on to the
transport. From the transport code's perspective, a
verbosity of 0 or 1 both meant "0".

Push, on the other hand, does not show its own status table;
that is always handled by the transport layer or below
(originally send-pack itself, but these days it is done by
the transport code). So a verbosity level of 1 meant that we
should pass the verbose flag to send-pack, so that it knows
we want a verbose status table. However, once 8afd8dc
switched it to the refactored fetch code, a verbosity level
of 1 was now being ignored.  Thus, you needed to
artificially bump the verbosity to 2 (via "-v -v") to have
any effect.

We can fix this by letting the transport code know about the
true verbosity level (i.e., let it distinguish level 0 or
1).

We then have to also make an adjustment to any transport
methods that assumed "verbose > 0" meant they could spew
lots of debugging information. Before, they could only get
"0" or "2", but now they will also receive "1". They need to
adjust their condition for turning on such spew from
"verbose > 0" to "verbose > 1".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoUpdate draft release notes to 1.7.9
Junio C Hamano [Sat, 17 Dec 2011 06:45:03 +0000 (22:45 -0800)] 
Update draft release notes to 1.7.9

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'jc/commit-amend-no-edit'
Junio C Hamano [Sat, 17 Dec 2011 06:33:56 +0000 (22:33 -0800)] 
Merge branch 'jc/commit-amend-no-edit'

* jc/commit-amend-no-edit:
  test: commit --amend should honor --no-edit
  commit: honour --no-edit
  t7501 (commit): modernize style
  test: remove a porcelain test that hard-codes commit names
  test: add missing "&&" after echo command

12 years agoMerge branch 'jc/stream-to-pack'
Junio C Hamano [Sat, 17 Dec 2011 06:33:40 +0000 (22:33 -0800)] 
Merge branch 'jc/stream-to-pack'

* jc/stream-to-pack:
  bulk-checkin: replace fast-import based implementation
  csum-file: introduce sha1file_checkpoint
  finish_tmp_packfile(): a helper function
  create_tmp_packfile(): a helper function
  write_pack_header(): a helper function

Conflicts:
pack.h

12 years agoMerge branch 'aw/rebase-i-stop-on-failure-to-amend'
Junio C Hamano [Sat, 17 Dec 2011 06:33:37 +0000 (22:33 -0800)] 
Merge branch 'aw/rebase-i-stop-on-failure-to-amend'

* aw/rebase-i-stop-on-failure-to-amend:
  rebase -i: interrupt rebase when "commit --amend" failed during "reword"

12 years agoMerge branch 'jh/fast-import-notes'
Junio C Hamano [Sat, 17 Dec 2011 06:33:34 +0000 (22:33 -0800)] 
Merge branch 'jh/fast-import-notes'

* jh/fast-import-notes:
  fast-import: Fix incorrect fanout level when modifying existing notes refs
  t9301: Add 2nd testcase exposing bugs in fast-import's notes fanout handling
  t9301: Fix testcase covering up a bug in fast-import's notes fanout handling

12 years agoMerge branch 'jk/upload-archive-use-start-command'
Junio C Hamano [Sat, 17 Dec 2011 06:33:30 +0000 (22:33 -0800)] 
Merge branch 'jk/upload-archive-use-start-command'

* jk/upload-archive-use-start-command:
  upload-archive: use start_command instead of fork

12 years agoMerge git://ozlabs.org/~paulus/gitk
Junio C Hamano [Sat, 17 Dec 2011 06:18:42 +0000 (22:18 -0800)] 
Merge git://ozlabs.org/~paulus/gitk

* git://ozlabs.org/~paulus/gitk:
  gitk: Make vi-style keybindings more vi-like
  gitk: Make "touching paths" search support backslashes
  gitk: Show modified files with separate work tree
  gitk: Simplify calculation of gitdir
  gitk: Run 'git rev-parse --git-dir' only once
  gitk: Put temporary directory inside .git
  gitk: Fix "External diff" with separate work tree
  gitk: Fix "blame parent commit" with separate work tree
  gitk: Fix "show origin of this line" with separate work tree
  gitk: Fix file highlight when run in subdirectory
  gitk: Update copyright
  gitk: When a commit contains a note, mark it with a yellow box
  gitk: Remember time zones from author and commit timestamps
  gitk: Remove unused $cdate array

12 years agodocs: brush up obsolete bits of git-fsck manpage
Jeff King [Fri, 16 Dec 2011 11:33:10 +0000 (06:33 -0500)] 
docs: brush up obsolete bits of git-fsck manpage

After the description and options, the fsck manpage contains
some discussion about what it does. Over time, this
discussion has become somewhat obsolete, both in content and
formatting. In particular:

  1. There are many options now, so starting the discussion
     with "It tests..." makes it unclear whether we are
     talking about the last option, or about the tool in
     general. Let's start a new "discussion" section and
     make our antecedent more clear.

  2. It gave an example for --unreachable using for-each-ref
     to mention all of the heads, saying that it will do "a
     _lot_ of verification". This is hopelessly out-of-date,
     as giving no arguments will check much more (reflogs,
     the index, non-head refs).

  3. It goes on to mention tests "to be added" (like tree
     object sorting). We now have these tests.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogrep: disable threading in non-worktree case
Thomas Rast [Mon, 12 Dec 2011 21:16:08 +0000 (22:16 +0100)] 
grep: disable threading in non-worktree case

Measurements by various people have shown that grepping in parallel is
not beneficial when the object store is involved.  For example, with a
simple regex:

  Threads     | --cached case            | worktree case
  ----------------------------------------------------------------
  8 (default) | 2.88u 0.21s 0:02.94real  | 0.19u 0.32s 0:00.16real
  4           | 2.89u 0.29s 0:02.99real  | 0.16u 0.34s 0:00.17real
  2           | 2.83u 0.36s 0:02.87real  | 0.18u 0.32s 0:00.26real
  NO_PTHREADS | 2.16u 0.08s 0:02.25real  | 0.12u 0.17s 0:00.31real

This happens because all the threads contend on read_sha1_mutex almost
all of the time.  A more complex regex allows the threads to do more
work in parallel, but as Jeff King found out, the "super boost" (much
higher clock when only one core is active) feature of recent CPUs
still causes the unthreaded case to win by a large margin.

So until the pack machinery allows unthreaded access, we disable
grep's threading in all but the worktree case.

Helped-by: René Scharfe <rene.scharfe@lsrfire.ath.cx>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogrep: enable threading with -p and -W using lazy attribute lookup
Thomas Rast [Mon, 12 Dec 2011 21:16:07 +0000 (22:16 +0100)] 
grep: enable threading with -p and -W using lazy attribute lookup

Lazily load the userdiff attributes in match_funcname().  Use a
separate mutex around this loading to protect the (not thread-safe)
attributes machinery.  This lets us re-enable threading with -p and
-W while reducing the overhead caused by looking up attributes.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agolf_to_crlf_filter(): tell the caller we added "\n" when draining
Junio C Hamano [Fri, 16 Dec 2011 22:39:37 +0000 (14:39 -0800)] 
lf_to_crlf_filter(): tell the caller we added "\n" when draining

This can only happen when the input size is multiple of the
buffer size of the cascade filter (16k) and ends with an LF,
but in such a case, the code forgot to tell the caller that
it added the "\n" it could not add during the last round.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agopretty: give placeholders to reflog identity
Jeff King [Fri, 16 Dec 2011 11:40:24 +0000 (06:40 -0500)] 
pretty: give placeholders to reflog identity

When doing a reflog walk, you can get some information about
the reflog (such as the subject line), but not the identity
information (i.e., name and email).

Let's make those available, mimicing the options for author
and committer identity.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agouse custom rename score during --follow
Jeff King [Fri, 16 Dec 2011 11:27:50 +0000 (06:27 -0500)] 
use custom rename score during --follow

If you provide a custom rename score on the command line,
like:

  git log -M50 --follow foo.c

it is completely ignored, and there is no way to --follow
with a looser rename score. Instead, let's use the same
rename score that will be used for generating diffs. This is
convenient, and mirrors what we do with the break-score.

You can see an example of it being useful in git.git:

  $ git log --oneline --summary --follow \
    Documentation/technical/api-string-list.txt
  86d4b52 string-list: Add API to remove an item from an unsorted list
  1d2f80f string_list: Fix argument order for string_list_append
  e242148 string-list: add unsorted_string_list_lookup()
  0dda1d1 Fix two leftovers from path_list->string_list
  c455c87 Rename path_list to string_list
   create mode 100644 Documentation/technical/api-string-list.txt

  $ git log --oneline --summary -M40 --follow \
  Documentation/technical/api-string-list.txt
  86d4b52 string-list: Add API to remove an item from an unsorted list
  1d2f80f string_list: Fix argument order for string_list_append
  e242148 string-list: add unsorted_string_list_lookup()
  0dda1d1 Fix two leftovers from path_list->string_list
  c455c87 Rename path_list to string_list
   rename Documentation/technical/{api-path-list.txt => api-string-list.txt} (47%)
  328a475 path-list documentation: document all functions and data structures
  530e741 Start preparing the API documents.
   create mode 100644 Documentation/technical/api-path-list.txt

You could have two separate rename scores, one for following
and one for diff. But almost nobody is going to want that,
and it would just be unnecessarily confusing. Besides which,
we re-use the diff results from try_to_follow_renames for
the actual diff output, which means having them as separate
scores is actively wrong. E.g., with the current code, you
get:

  $ git log --oneline --diff-filter=R --name-status \
            -M90 --follow git.spec.in
  27dedf0 GIT 0.99.9j aka 1.0rc3
  R084    git-core.spec.in        git.spec.in
  f85639c Rename the RPM from "git" to "git-core"
  R098    git.spec.in     git-core.spec.in

The first one should not be considered a rename by the -M
score we gave, but we print it anyway, since we blindly
re-use the diff information from the follow (which uses the
default score). So this could also be considered simply a
bug-fix, as with the current code "-M" is completely ignored
when using "--follow".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorequest-pull: update the "pull" command generation logic
Junio C Hamano [Fri, 16 Dec 2011 17:00:11 +0000 (09:00 -0800)] 
request-pull: update the "pull" command generation logic

The old code that insisted on asking for the tip of a branch to be pulled
were not updated when we started allowing for a tag to be pulled. When a
tag points at an older part of the history and there is no branch that
points at the tagged commit, the script failed to say which ref is to be
pulled.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agot3502, t3510: clarify cherry-pick -m failure
Ramkumar Ramachandra [Wed, 14 Dec 2011 16:54:33 +0000 (22:24 +0530)] 
t3502, t3510: clarify cherry-pick -m failure

The "cherry-pick persists opts correctly" test in t3510
(cherry-pick-sequence) can cause some confusion, because the command
actually has two points of failure:

1. "-m 1" is specified on the command-line despite the base commit
   "initial" not being a merge-commit.
2. The revision range indicates that there will be a conflict that
   needs to be resolved.

Although the former error is trapped, and cherry-pick die()s with the
exit status 128, the reader may be distracted by the latter.  Fix this
by changing the revision range to something that wouldn't cause a
conflict.  Additionally, explicitly check the exit code in
"cherry-pick a non-merge with -m should fail" in t3502
(cherry-pick-merge) to reassure the reader that this failure has
nothing to do with the sequencer itself.

Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agot3510 (cherry-pick-sequencer): use exit status
Ramkumar Ramachandra [Wed, 14 Dec 2011 16:54:32 +0000 (22:24 +0530)] 
t3510 (cherry-pick-sequencer): use exit status

All the tests asserting failure use 'test_must_fail', which simply
checks for a non-zero exit status, potentially hiding underlying bugs.
So, replace instances of 'test_must_fail' with 'test_expect_code' to
check the exit status explicitly, where appropriate.

Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorevert: simplify getting commit subject in format_todo()
Ramkumar Ramachandra [Wed, 14 Dec 2011 16:54:31 +0000 (22:24 +0530)] 
revert: simplify getting commit subject in format_todo()

format_todo() calls get_message(), but uses only the subject line of
the commit message.  As a minor optimization, save work and
unnecessary memory allocations by using find_commit_subject() instead.
Also, remove the unnecessary check on cur->item->buffer: the
lookup_commit_reference() call in parse_insn_line() has already made
sure of this.

Suggested-by: Jonathan Nieder <jrnieder@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorevert: tolerate extra spaces, tabs in insn sheet
Ramkumar Ramachandra [Wed, 14 Dec 2011 16:54:30 +0000 (22:24 +0530)] 
revert: tolerate extra spaces, tabs in insn sheet

Tolerate extra spaces and tabs as part of the the field separator in
'.git/sequencer/todo', for people with fat fingers.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorevert: make commit subjects in insn sheet optional
Ramkumar Ramachandra [Wed, 14 Dec 2011 16:54:29 +0000 (22:24 +0530)] 
revert: make commit subjects in insn sheet optional

Change the instruction sheet format subtly so that the subject of the
commit message that follows the object name is optional.  As a result,
an instruction sheet like this is now perfectly valid:

  pick 35b0426
  pick fbd5bbcbc2e
  pick 7362160f

While at it, also fix a bug introduced by 5a5d80f4 (revert: Introduce
--continue to continue the operation, 2011-08-04) that failed to read
lines that are too long to fit on the commit-id-shaped buffer we
currently use; eliminate the need for the buffer altogether.  In
addition to literal SHA-1 hexes, you can now safely use expressions
like the following in the instruction sheet:

  featurebranch~4
  rr/revert-cherry-pick-continue^2~12@{12 days ago}

[jc: simplify parsing]

Suggested-by: Jonathan Nieder <jrnieder@gmail.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorevert: free msg in format_todo()
Ramkumar Ramachandra [Wed, 14 Dec 2011 16:54:28 +0000 (22:24 +0530)] 
revert: free msg in format_todo()

Memory allocated to the fields of msg by get_message() isn't freed.
This is potentially a big leak, because fresh memory is allocated to
store the commit message for each commit.  Fix this using
free_message().

Reported-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agocommit_tree(): refuse commit messages that contain NULs
Nguyễn Thái Ngọc Duy [Thu, 15 Dec 2011 13:47:23 +0000 (20:47 +0700)] 
commit_tree(): refuse commit messages that contain NULs

Current implementation sees NUL as terminator. If users give a message
with NUL byte in it (e.g. editor set to save as UTF-16), the new commit
message will have NULs. However following operations (displaying or
amending a commit for example) will not keep anything after the first NUL.

Stop user right when they do this. If NUL is added by mistake, they have
their chance to fix. Otherwise, log messages will no longer be text "git
log" and friends would grok.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoConvert commit_tree() to take strbuf as message
Nguyễn Thái Ngọc Duy [Thu, 15 Dec 2011 13:47:22 +0000 (20:47 +0700)] 
Convert commit_tree() to take strbuf as message

There wan't a way for commit_tree() to notice if the message the caller
prepared contained a NUL byte, as it did not take the length of the
message as a parameter. Use a pointer to a strbuf instead, so that we can
either choose to allow low-level plumbing commands to make commits that
contain NUL byte in its message, or forbid NUL everywhere by adding the
check in commit_tree(), in later patches.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agomerge: abort if fails to commit
Nguyễn Thái Ngọc Duy [Thu, 15 Dec 2011 13:47:21 +0000 (20:47 +0700)] 
merge: abort if fails to commit

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agotest-lib: redirect stdin of tests
Jeff King [Thu, 15 Dec 2011 06:55:29 +0000 (01:55 -0500)] 
test-lib: redirect stdin of tests

We want to run tests in a predictable, sterile environment
so we can get repeatable results.  They should take as
little input as possible from the environment outside the
test script. We already sanitize environment variables, but
leave stdin untouched. This means that scripts can
accidentally be impacted by content on stdin, or whether
stdin isatty().

Furthermore, scripts reading from stdin can be annoying to
outer loops which care about their stdin offset, like:

  while read sha1; do
      make test
  done

A test which accidentally reads stdin would soak up all of
the rest of the input intended for the outer shell loop.

Let's redirect stdin from /dev/null, which solves both
of these problems. It won't detect tests accidentally
reading from stdin, but since doing so now gives a
deterministic result, we don't need to consider that an
error.

We'll also leave file descriptor 6 as a link to the original
stdin. Tests shouldn't need to look at this, but it can be
convenient for inserting interactive commands while
debugging tests (e.g., you could insert "bash <&6 >&3 2>&4"
to run interactive commands in the environment of the test
script).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agocheckout_merged(): squelch false warning from some gcc
Junio C Hamano [Thu, 15 Dec 2011 18:10:11 +0000 (10:10 -0800)] 
checkout_merged(): squelch false warning from some gcc

gcc 4.6.2 (there may be others) does not realize that the variable "mode"
can never be used uninitialized in this function and issues a false warning
under -Wuninitialized option.

Squelch it with an unnecessary initialization; it is not like a single
assignment matters to the performance in this codepath that writes out
to the filesystem with checkout_entry() anyway.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agocompat/setenv.c: error if name contains '='
Erik Faye-Lund [Wed, 14 Dec 2011 14:07:09 +0000 (15:07 +0100)] 
compat/setenv.c: error if name contains '='

According to POSIX, setenv should error out with EINVAL if it's
asked to set an environment variable whose name contains an equals
sign. Implement this detail in our compatibility-fallback.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agocompat/setenv.c: update errno when erroring out
Erik Faye-Lund [Wed, 14 Dec 2011 14:07:08 +0000 (15:07 +0100)] 
compat/setenv.c: update errno when erroring out

Previously, gitsetenv didn't update errno as it should when
erroring out. Fix this.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agotest: errors preparing for a test are not special
Jonathan Nieder [Wed, 14 Dec 2011 08:22:03 +0000 (02:22 -0600)] 
test: errors preparing for a test are not special

This script uses the following idiom to start each test in a known
good state:

test_expect_success 'some commands use a pager' '
rm -f paginated.out || cleanup_fail &&
test_terminal git log &&
test -e paginated.out
'

where "cleanup_fail" is a function that prints an error message and
errors out.

That is bogus on three levels:

 - Cleanup commands like "rm -f" and "test_unconfig" are designed not
   to fail, so this logic would never trip.

 - If they were to malfunction anyway, it is not useful to set apart
   cleanup commands as a special kind of failure with a special error
   message.  Whichever command fails, the next step is to investigate
   which command that was, for example by running tests with
   "prove -e 'sh -x'", and fix it.

 - Relying on left-associativity of mixed &&/|| lists makes the code
   somewhat cryptic.

The fix is simple: drop the "|| cleanup_fail" in each test and the
definition of the "cleanup_fail" function so no new callers can arise.

Reported-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>