summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2010-12-07get_sha1: support relative path ":path" syntaxLibravatar Nguyễn Thái Ngọc Duy3-3/+100
Currently :path and ref:path can be used to refer to a specific object in index or ref respectively. "path" component is absolute path. This patch allows "path" to be written as "./path" or "../path", which is relative to user's original cwd. This does not work in commands for which startup_info is NULL (i.e. non-builtin ones, it seems none of them needs this anyway). Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-12-07Make prefix_path() return char* without constLibravatar Nguyễn Thái Ngọc Duy2-2/+2
prefix_path() allocates new buffer. There's no reason for it to keep the buffer for itself and waste memory. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-12-07update-index: migrate to parse-options APILibravatar Jonathan Nieder1-149/+243
--refresh and --really-refresh accept flags (like -q) and modify an error indicator. It might make sense to make the error indicator global, but just pass the flags and a pointer to the error indicator in a struct instead. --cacheinfo wants 3 arguments. Use the OPTION_LOWLEVEL_CALLBACK extension to grab them and PARSE_OPT_NOARG to disallow the "sticked" --cacheinfo=foo form. (The resulting message $ git update-index --cacheinfo=foo error: option `cacheinfo' takes no value is unfortunately incorrect.) --assume-unchanged and --no-assume-unchanged probably should use the OPT_UYN feature; but use a callback for now so the existing MARK_FLAG and UNMARK_FLAG values can be used. --stdin and --index-info are still constrained to be the last argument (implemented using the OPTION_LOWLEVEL_CALLBACK extension). --unresolve and --again consume all arguments that come after them (also using OPTION_LOWLEVEL_CALLBACK). The order of options matters. Each path on the command line is affected only by the options that come before it. A custom argument-parsing loop with parse_options_step() brings that about. In exchange for all the fuss, we get the usual perks: support for un-sticked options, better usage error messages, more useful -h output, and argument parsing code that should be easier to tweak in the future. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-12-07setup: save prefix (original cwd relative to toplevel) in startup_infoLibravatar Nguyễn Thái Ngọc Duy2-1/+4
Save the path from the original cwd to the cwd at the end of the setup procedure in the startup_info struct introduced in e37c1329 (2010-08-05). The value cannot vary from thread to thread anyway, since the cwd is global. So now in your builtin command, instead of passing prefix around, when you want to convert a user-supplied path to a cwd-relative path, you can use startup_info->prefix directly. Caveat: As with the return value from setup_git_directory_gently(), startup_info->prefix would be NULL when the original cwd is not a subdir of the toplevel. Longer term, this would allow the prefix to be reused when several noncooperating functions require access to the same repository (for example, when accessing configuration before running a builtin). Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-12-07parse-options: make resuming easier after PARSE_OPT_STOP_AT_NON_OPTIONLibravatar Jonathan Nieder2-1/+3
Introduce a PARSE_OPT_NON_OPTION state, so parse_option_step() callers can easily distinguish between non-options and other reasons for option parsing termination (like "--"). Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-12-07parse-options: allow git commands to invent new option typesLibravatar Jonathan Nieder2-1/+10
parse-options provides a variety of option behaviors, including OPTION_CALLBACK, which should take care of just about any sane behavior. All supported behaviors obey the following constraint: A --foo option can only accept (and base its behavior on) one argument, which would be the following command-line argument in the "unsticked" form. Alas, some existing git commands have options that do not obey that constraint. For example, update-index --cacheinfo takes three arguments, and update-index --resolve takes all later parameters as arguments. Introduces an OPTION_LOWLEVEL_CALLBACK backdoor to parse-options so such option types can be supported without tempting inventors of other commands through mention in the public API. Commands can set the callback field to a function accepting three arguments: the option parsing context, the option itself, and a flag indicating whether the the option was negated. When the option is encountered, that function is called to take over from get_value(). The return value should be zero for success, -1 for usage errors. Thanks to Stephen Boyd for API guidance. Improved-by: Stephen Boyd <bebarino@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-12-07parse-options: never suppress arghelp if LITERAL_ARGHELP is setLibravatar Jonathan Nieder1-1/+2
The PARSE_OPT_LITERAL_ARGHELP flag allows a program to override the standard "<argument> for mandatory, [argument] for optional" markup in its help message. Extend it to override the usual "no text for disallowed", too (for the PARSE_OPT_NOARG | PARSE_OPT_LITERAL_ARGHELP case, which was previously meaningless), to be more intuitive. The motivation is to allow update-index to correctly advertise --cacheinfo <mode> <object> <path> add the specified entry to the index while abusing PARSE_OPT_NOARG to disallow the "sticked form" --cacheinfo=<mode> <object> <path> Noticed-by: Stephen Boyd <bebarino@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-12-07parse-options: do not infer PARSE_OPT_NOARG from option typeLibravatar Stephen Boyd1-17/+2
Simplify the "takes no value" error path by relying on PARSE_OPT_NOARG being set correctly. That is: - if the PARSE_OPT_NOARG flag is set, reject --opt=value regardless of the option type; - if the PARSE_OPT_NOARG flag is unset, accept --opt=value regardless of the option type. This way, the accepted usage more closely matches the usage advertised with --help-all. No functional change intended, since the NOARG flag is only used with "boolean-only" option types in existing parse_options callers. Signed-off-by: Stephen Boyd <bebarino@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-12-07parse-options: sanity check PARSE_OPT_NOARG flagLibravatar Jonathan Nieder1-0/+13
Some option types cannot use an argument --- boolean options that would set a bit or flag or increment a counter, for example. If configured in the flag word to accept an argument anyway, the result is an argument that is advertised in "program -h" output only to be rejected by parse-options::get_value. Luckily all current users of these option types use PARSE_OPT_NOARG and do not use PARSE_OPT_OPTARG. Add a check to ensure that that remains true. The check is run once for each invocation of parse_option_start(). Improved-by: Stephen Boyd <bebarino@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-12-07parse-options: move NODASH sanity checks to parse_options_checkLibravatar Jonathan Nieder1-7/+7
A dashless switch (like '(' passed to 'git grep') cannot be negated, cannot be attached to an argument, and cannot have a long form. Currently parse-options runs the related sanity checks when the dashless option is used; better to always check them at the start of option parsing, so mistakes can be caught more quickly. The error message at the new call site is less specific about the nature of the error, for simplicity. On the other hand, it prints which switch was problematic. Before: fatal: BUG: dashless options can't be long After: error: BUG: switch '(' uses feature not supported for dashless options Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-12-07parse-options: clearer reporting of API misuseLibravatar Jonathan Nieder1-12/+11
The PARSE_OPT_LASTARG_DEFAULT flag is meant for options like --contains that (1) traditionally had a mandatory argument and (2) have some better behavior to use when appearing in the final position. It makes no sense to combine this with OPTARG, so ever since v1.6.4-rc0~71 (parse-options: add parse_options_check to validate option specs, 2009-07-09) this mistake is flagged with error: `--option` uses incompatible flags LASTARG_DEFAULT and OPTARG and an exit status representing an error in commandline usage. Unfortunately that which might confuse scripters calling such an erroneous program into thinking the _script_ contains an error. Clarify that it is an internal error by dying with a message beginning "error: BUG: ..." and status 128. While at it, clean up parse_options_check to prepare for more checks. Long term, it would be nicer to make such checks happen at compile time. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-12-06parse-options: Don't call parse_options_check() so muchLibravatar Stephen Boyd4-9/+8
parse_options_check() is being called for each invocation of parse_options_step which can be quite a bit for some commands. The commit introducing this function cb9d398 (parse-options: add parse_options_check to validate option specs., 2009-06-09) had the correct motivation and explicitly states that parse_options_check() should be called from parse_options_start(). However, the implementation differs from the motivation. Fix it. Signed-off-by: Stephen Boyd <bebarino@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-24Merge branch 'jl/maint-pull-tags-doc' into maintLibravatar Junio C Hamano1-0/+2
* jl/maint-pull-tags-doc: pull: Remove --tags option from manpage
2010-11-24Merge branch 'kb/maint-diff-ws-check' into maintLibravatar Junio C Hamano4-47/+118
* kb/maint-diff-ws-check: diff: handle lines containing only whitespace and tabs better test-lib: extend test_decode_color to handle more color codes
2010-11-24Merge branch 'jm/mailmap' into maintLibravatar Junio C Hamano2-16/+61
* jm/mailmap: t4203: do not let "git shortlog" DWIM based on tty t4203 (mailmap): stop hardcoding commit ids and dates mailmap: fix use of freed memory
2010-11-24Merge branch 'tr/maint-git-repack-tmpfile' into maintLibravatar Junio C Hamano1-2/+3
* tr/maint-git-repack-tmpfile: repack: place temporary packs under .git/objects/pack/
2010-11-24Merge branch 'jk/maint-apply-no-binary' into maintLibravatar Junio C Hamano2-1/+32
* jk/maint-apply-no-binary: apply: don't segfault on binary files with missing data
2010-11-24Merge branch 'jn/send-pack-error' into maintLibravatar Junio C Hamano1-1/+1
* jn/send-pack-error: send-pack: avoid redundant "pack-objects died with strange error"
2010-11-24Merge branch 'ak/submodule-sync' into maintLibravatar Junio C Hamano2-3/+14
* ak/submodule-sync: submodule sync: Update "submodule.<name>.url" for empty directories
2010-11-24Merge branch 'jk/maint-rev-list-nul' into maintLibravatar Junio C Hamano4-6/+16
* jk/maint-rev-list-nul: rev-list: handle %x00 NUL in user format
2010-11-24Merge branch 'cb/diff-fname-optim' into maintLibravatar Junio C Hamano3-25/+124
* cb/diff-fname-optim: diff: avoid repeated scanning while looking for funcname do not search functions for patch ID add rebase patch id tests
2010-11-24Merge branch 'jk/no-textconv-symlink' into maintLibravatar Junio C Hamano2-3/+34
* jk/no-textconv-symlink: diff: don't use pathname-based diff drivers for symlinks
2010-11-24Merge branch 'dk/maint-blame-el' into maintLibravatar Junio C Hamano1-0/+1
* dk/maint-blame-el: git-blame.el: Add (require 'format-spec)
2010-11-24Merge branch 'aw/git-p4-deletion' into maintLibravatar Junio C Hamano1-1/+3
* aw/git-p4-deletion: Fix handling of git-p4 on deleted files
2010-11-24Merge branch 'kf/post-receive-sample-hook' into maintLibravatar Junio C Hamano1-16/+31
* kf/post-receive-sample-hook: post-receive-email: ensure sent messages are not empty
2010-11-24Merge branch 'jk/repack-reuse-object' into maintLibravatar Junio C Hamano3-3/+13
* jk/repack-reuse-object: Documentation: pack.compression: explain how to recompress repack: add -F flag to let user choose between --no-reuse-delta/object Conflicts: Documentation/git-repack.txt
2010-11-24Merge branch 'bc/fix-cherry-pick-root' into maintLibravatar Junio C Hamano2-1/+11
* bc/fix-cherry-pick-root: builtin/revert.c: don't dereference a NULL pointer
2010-11-24Merge branch 'uk/fix-author-ident-sed-script' into maintLibravatar Junio C Hamano1-3/+0
* uk/fix-author-ident-sed-script: get_author_ident_from_commit(): remove useless quoting
2010-11-24Merge branch 'ab/makefile-track-cc' into maintLibravatar Junio C Hamano1-1/+1
* ab/makefile-track-cc: Makefile: add CC to TRACK_CFLAGS
2010-11-24Merge branch 'mg/reset-doc' into maintLibravatar Junio C Hamano1-29/+47
* mg/reset-doc: git-reset.txt: make modes description more consistent git-reset.txt: point to git-checkout git-reset.txt: use "working tree" consistently git-reset.txt: reset --soft is not a no-op git-reset.txt: reset does not change files in target git-reset.txt: clarify branch vs. branch head
2010-11-24Merge branch 'tr/send-email-refuse-sending-unedited-cover-letter' into maintLibravatar Junio C Hamano2-0/+49
* tr/send-email-refuse-sending-unedited-cover-letter: send-email: Refuse to send cover-letter template subject
2010-11-24imap-send: link against libcrypto for HMAC and othersLibravatar Diego Elio Pettenò1-1/+1
When using stricter linkers, such as GNU gold or Darwin ld, transitive dependencies are not counted towards symbol resolution. If we don't link imap-send to libcrypto, we'll have undefined references to the HMAC_*, EVP_* and ERR_* functions families. Signed-off-by: Diego Elio Pettenò <flameeyes@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-24git-send-email.perl: Deduplicate "to:" and "cc:" entries with namesLibravatar Joe Perches1-1/+1
If an email address in the "to:" list is in the style "First Last <email@domain.tld>", ie: not just a bare address like "email@domain.tld", and the same named entry style exists in the "cc:" list, the current logic will not remove the entry from the "cc:" list. Add logic to better deduplicate the "cc:" list by also matching the email address with angle brackets. Signed-off-by: Joe Perches <joe@perches.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-23mingw: do not set errno to 0 on successLibravatar Erik Faye-Lund1-1/+3
Currently do_lstat always sets errno to 0 on success. This incorrectly overwrites previous errors. Fetch the error-code into a temporary variable instead, and assign that to errno on failure. Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-17clean: remove redundant variable baselenLibravatar Nguyễn Thái Ngọc Duy1-2/+2
baselen used to be the result of common_prefix() when it was made builtin. Since 1d8842d (Add 'fill_directory()' helper function for directory traversal - 2009-05-14), its value will always be zero. Remove it because it's no longer variable. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-17Merge branch 'mz/maint-rebase-X-fix' into maintLibravatar Junio C Hamano1-0/+21
* mz/maint-rebase-X-fix: t3402: test "rebase -s<strategy> -X<opt>"
2010-11-17Documentation/git-pull: clarify configurationLibravatar Martin von Zweigbergk1-6/+8
The sentence about 'branch.<name>.rebase' refers to the first sentence in the paragraph and not to the sentence about avoiding rebasing non-local changes. Clarify this. Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-17Document that rev-list --graph triggers parent rewriting.Libravatar Yann Dirson1-0/+2
This may help to understand why --graph causes more comments to be selected. Signed-off-by: Yann Dirson <ydirson@altern.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-16clean: avoid quoting twiceLibravatar Nguyễn Thái Ngọc Duy1-2/+2
qname is the result of quote_path_relative(), which does quote_c_style_counted() internally. Remove the hard-coded quotes. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-16document sigchain apiLibravatar Jeff King1-0/+41
It's pretty straightforward, but a stripped-down example never hurts. And we should make clear that it is explicitly OK to use SIG_DFL and SIG_IGN. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-16Keep together options controlling the behaviour of diffcore-rename.Libravatar Yann Dirson1-14/+12
It makes little sense to have --diff-filter in the middle of them, and even spares an ifndef::git-format-patch. Signed-off-by: Yann Dirson <ydirson@altern.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-11t3402: test "rebase -s<strategy> -X<opt>"Libravatar Junio C Hamano1-0/+21
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-10rebase -X: do not clobber strategyLibravatar Martin von Zweigbergk1-4/+0
If any strategy options are passed to -X, the strategy will always be set to 'recursive'. According to the documentation, it should default to 'recursive' if it is not set, but it should be possible to set it to other values. This fixes a regression introduced in v1.7.3-rc0~67^2 (2010-07-29). Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-09Documentation: document show -sLibravatar Jonathan Nieder2-0/+7
Git's diff machinery has supported a -s (silence diff output) option as far back as v0.99~900 (Silent flag for show-diff, 2005-04-13), but the option is only advertised in an odd corner of the git diff-tree manual. The main use is to retrieve basic metadata about a commit: git show -s rev Explain this in the 'git log' manual and provide an example in the 'git show' examples section. This is kind of a cop-out, since it would be more useful to explain it in the 'git show' manual proper, which says: The command takes options applicable to the git diff-tree command to control how the changes the commit introduces are shown. This manual page describes only the most frequently used options. Fixing that is a larger task for another day. Reported-by: Will Hall <will@gnatter.net> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-08dir.c: fix EXC_FLAG_MUSTBEDIR match in sparse checkoutLibravatar Nguyễn Thái Ngọc Duy2-4/+9
Commit c84de70 (excluded_1(): support exclude files in index - 2009-08-20) tries to work around the fact that there is no directory/file information in index entries, therefore EXC_FLAG_MUSTBEDIR match would fail. Unfortunately the workaround is flawed. This fixes it. Reported-by: Thomas Rinderknecht <thomasr@sailguy.org> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-03pull: Remove --tags option from manpageLibravatar Jens Lehmann1-0/+2
"Fetch all tags and merge them" does not make any sense as a request at the logical level, even though it might be more convenient to type. Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-11-03git-blame.el: Add (require 'format-spec)Libravatar David Kågedal1-0/+1
c5022f57 (git-blame.el: Change how blame information is shown, 2009-09-29) taught the "M-x git-blame" mode to format its output in a more interesting way, making use of the format-spec function. format-spec is included in Emacs 23 and is a useful function. Older emacsen can get it from Gnus. In all emacsen, we need to 'require it before use to avoid warnings: git-blame.el:483:1:Warning: the function `format-spec' is not known to be defined. Reported-by: Sergei Organov <osv@javad.com> Reported-by: Kevin Ryde <user42@zip.com.au> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-10-29apply: don't segfault on binary files with missing dataLibravatar Jeff King2-1/+32
Usually when applying a binary diff generated without --binary, it will be rejected early, as we don't even have the full sha1 of the pre- and post-images. However, if the diff is generated with --full-index (but not --binary), then we will actually try to apply it. If we have the postimage blob, then we can take a shortcut and never even look at the binary diff at all (e.g., this can happen when rebasing changes within a repository). If we don't have the postimage blob, though, we try to look at the actual fragments, of which there are none, and get a segfault. This patch checks explicitly for that case and complains to the user instead of segfaulting. We need to keep the check at a low level so that the "shortcut" case above continues to work. We also add a test that demonstrates the segfault. While we're at it, let's also explicitly test the shortcut case. Reported-by: Rafaël Carré <rafael.carre@gmail.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-10-29Fix a formatting error in git-merge.txtLibravatar Nathan W. Panike1-7/+7
Inside an element of an enumerated list, the second and subsequent paragraphs need to lose their indent and have to be strung together with a line with a single '+' on it instead. Otherwise the lines below are shown in typewriter face, which just looks wrong. Signed-off-by: Nathan W. Panike <nathan.panike@gmail.com> Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-10-25Fix copy-pasted comments related to tree diff handling.Libravatar Yann Dirson1-2/+2
Signed-off-by: Junio C Hamano <gitster@pobox.com>