Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Commits on Aug 22, 2012
  1. Merge branch 'tr/void-diff-setup-done'

    authored
    Remove unnecessary code.
    
    * tr/void-diff-setup-done:
      diff_setup_done(): return void
Commits on Aug 3, 2012
  1. @trast

    diff_setup_done(): return void

    trast authored committed
    diff_setup_done() has historically returned an error code, but lost
    the last nonzero return in 943d5b7 (allow diff.renamelimit to be set
    regardless of -M/-C, 2006-08-09).  The callers were in a pretty
    confused state: some actually checked for the return code, and some
    did not.
    
    Let it return void, and patch all callers to take this into account.
    This conveniently also gets rid of a handful of different(!) error
    messages that could never be triggered anyway.
    
    Note that the function can still die().
    
    Signed-off-by: Thomas Rast <trast@student.ethz.ch>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Jun 7, 2012
  1. @pclouds

    notes-merge: remove i18n legos in merge result message

    pclouds authored committed
    Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Mar 15, 2012
  1. @jherland

    notes-merge: Don't remove .git/NOTES_MERGE_WORKTREE; it may be the us…

    jherland authored committed
    …er's cwd
    
    When a manual notes merge is committed or aborted, we need to remove the
    temporary worktree at .git/NOTES_MERGE_WORKTREE. However, removing the
    entire directory is not good if the user ran the 'git notes merge
    --commit/--abort' from within that directory. On Windows, the directory
    removal would simply fail, while on POSIX systems, users would suddenly
    find themselves in an invalid current directory.
    
    Therefore, instead of deleting the entire directory, we delete everything
    _within_ the directory, and leave the (empty) directory in place.
    
    This would cause a subsequent notes merge to abort, complaining about a
    previous - unfinished - notes merge (due to the presence of
    .git/NOTES_MERGE_WORKTREE), so we also need to adjust this check to only
    trigger when .git/NOTES_MERGE_WORKTREE is non-empty.
    
    Finally, adjust the t3310 manual notes merge testcases to correctly handle
    the existence of an empty .git/NOTES_MERGE_WORKTREE directory.
    
    Inspired-by: Junio C Hamano <gitster@pobox.com>
    Signed-off-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  2. @jherland

    notes-merge: use opendir/readdir instead of using read_directory()

    jherland authored committed
    notes_merge_commit() only needs to list all entries (non-recursively)
    under a directory, which can be easily accomplished with
    opendir/readdir and would be more lightweight than read_directory().
    
    read_directory() is designed to list paths inside a working
    directory. Using it outside of its scope may lead to undesired effects.
    
    Apparently, one of the undesired effects of read_directory() is that it
    doesn't deal with being given absolute paths. This creates problems for
    notes_merge_commit() when git_path() returns an absolute path, which
    happens when the current working directory is in a subdirectory of the
    .git directory.
    
    Originally-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Updated-by:  Johan Herland <johan@herland.net>
    Signed-off-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Jan 6, 2012
  1. Merge branch 'jc/show-sig'

    authored
    * jc/show-sig:
      log --show-signature: reword the common two-head merge case
      log-tree: show mergetag in log --show-signature output
      log-tree.c: small refactor in show_signature()
      commit --amend -S: strip existing gpgsig headers
      verify_signed_buffer: fix stale comment
      gpg-interface: allow use of a custom GPG binary
      pretty: %G[?GS] placeholders
      test "commit -S" and "log --show-signature"
      log: --show-signature
      commit: teach --gpg-sign option
    
    Conflicts:
    	builtin/commit-tree.c
    	builtin/commit.c
    	builtin/merge.c
    	notes-cache.c
    	pretty.c
Commits on Dec 22, 2011
  1. Merge branch 'nd/war-on-nul-in-commit'

    authored
    * 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
Commits on Dec 15, 2011
  1. @pclouds

    Convert commit_tree() to take strbuf as message

    pclouds authored committed
    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>
Commits on Dec 9, 2011
  1. Merge branch 'nd/resolve-ref'

    authored
    * nd/resolve-ref:
      Copy resolve_ref() return value for longer use
      Convert many resolve_ref() calls to read_ref*() and ref_exists()
    
    Conflicts:
    	builtin/fmt-merge-msg.c
    	builtin/merge.c
    	refs.c
Commits on Nov 18, 2011
  1. Sync with 1.7.7.4

    authored
  2. Merge branch 'jn/maint-notes-avoid-va-args' into maint

    authored
    * jn/maint-notes-avoid-va-args:
      notes merge: eliminate OUTPUT macro
    
    Conflicts:
    	notes-merge.c
  3. @jrn

    notes merge: eliminate OUTPUT macro

    jrn authored committed
    The macro is variadic, which breaks support for pre-C99 compilers,
    and it hides an "if", which can make code hard to understand on
    first reading if some arguments have side-effects.
    
    The OUTPUT macro seems to have been inspired by the "output" function
    from merge-recursive.  But that function in merge-recursive exists to
    indent output based on the level of recursion and there is no similar
    justification for such a function in "notes merge".
    
    Noticed with 'make CC="gcc -std=c89 -pedantic"':
    
     notes-merge.c:24:22: warning: anonymous variadic macros were introduced in C99 [-Wvariadic-macros]
    
    Encouraged-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
    Acked-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Nov 13, 2011
  1. @pclouds

    Convert many resolve_ref() calls to read_ref*() and ref_exists()

    pclouds authored committed
    resolve_ref() may return a pointer to a static buffer, which is not
    safe for long-term use because if another resolve_ref() call happens,
    the buffer may be changed.  Many call sites though do not care about
    this buffer. They simply check if the return value is NULL or not.
    
    Convert all these call sites to new wrappers to reduce resolve_ref()
    calls from 57 to 34. If we change resolve_ref() prototype later on
    to avoid passing static buffer out, this helps reduce changes.
    
    Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  2. commit: teach --gpg-sign option

    authored
    This uses the gpg-interface.[ch] to allow signing the commit, i.e.
    
        $ git commit --gpg-sign -m foo
        You need a passphrase to unlock the secret key for
        user: "Junio C Hamano <gitster@pobox.com>"
        4096-bit RSA key, ID 96AFE6CB, created 2011-10-03 (main key ID 713660A7)
    
        [master 8457d13] foo
         1 files changed, 1 insertions(+), 0 deletions(-)
    
    The lines of GPG detached signature are placed in a new multi-line header
    field, instead of tucking the signature block at the end of the commit log
    message text (similar to how signed tag is done), for multiple reasons:
    
     - The signature won't clutter output from "git log" and friends if it is
       in the extra header. If we place it at the end of the log message, we
       would need to teach "git log" and friends to strip the signature block
       with an option.
    
     - Teaching new versions of "git log" and "gitk" to optionally verify and
       show signatures is cleaner if we structurally know where the signature
       block is (instead of scanning in the commit log message).
    
     - The signature needs to be stripped upon various commit rewriting
       operations, e.g. rebase, filter-branch, etc. They all already ignore
       unknown headers, but if we place signature in the log message, all of
       these tools (and third-party tools) also need to learn how a signature
       block would look like.
    
     - When we added the optional encoding header, all the tools (both in tree
       and third-party) that acts on the raw commit object should have been
       fixed to ignore headers they do not understand, so it is not like that
       new header would be more likely to break than extra text in the commit.
    
    A commit made with the above sample sequence would look like this:
    
        $ git cat-file commit HEAD
        tree 3cd71d90e3db4136e5260ab54599791c4f883b9d
        parent b877553
        author Junio C Hamano <gitster@pobox.com> 1317862251 -0700
        committer Junio C Hamano <gitster@pobox.com> 1317862251 -0700
        gpgsig -----BEGIN PGP SIGNATURE-----
         Version: GnuPG v1.4.10 (GNU/Linux)
    
         iQIcBAABAgAGBQJOjPtrAAoJELC16IaWr+bL4TMP/RSe2Y/jYnCkds9unO5JEnfG
         ...
         =dt98
         -----END PGP SIGNATURE-----
    
        foo
    
    but "git log" (unless you ask for it with --pretty=raw) output is not
    cluttered with the signature information.
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Oct 10, 2011
  1. Merge branch 'mh/maint-notes-merge-pathbuf-fix'

    authored
    * mh/maint-notes-merge-pathbuf-fix:
      notes_merge_commit(): do not pass temporary buffer to other function
Commits on Oct 5, 2011
  1. @mhagger

    Change check_ref_format() to take a flags argument

    mhagger authored committed
    Change check_ref_format() to take a flags argument that indicates what
    is acceptable in the reference name (analogous to "git
    check-ref-format"'s "--allow-onelevel" and "--refspec-pattern").  This
    is more convenient for callers and also fixes a failure in the test
    suite (and likely elsewhere in the code) by enabling "onelevel" and
    "refspec-pattern" to be allowed independently of each other.
    
    Also rename check_ref_format() to check_refname_format() to make it
    obvious that it deals with refnames rather than references themselves.
    
    Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Sep 27, 2011
  1. @mhagger

    notes_merge_commit(): do not pass temporary buffer to other function

    mhagger authored committed
    It is unsafe to pass a temporary buffer as an argument to
    read_directory().
    
    Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
    Acked-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on May 9, 2011
  1. index_fd(): turn write_object and format_check arguments into one flag

    authored
    The "format_check" parameter tucked after the existing parameters is too
    ugly an afterthought to live in any reasonable API.
    
    Combine it with the other boolean parameter "write_object" into a single
    "flags" parameter.
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Mar 22, 2011
  1. @bebarino

    Fix sparse warnings

    bebarino authored committed
    Fix warnings from 'make check'.
    
     - These files don't include 'builtin.h' causing sparse to complain that
       cmd_* isn't declared:
    
       builtin/clone.c:364, builtin/fetch-pack.c:797,
       builtin/fmt-merge-msg.c:34, builtin/hash-object.c:78,
       builtin/merge-index.c:69, builtin/merge-recursive.c:22
       builtin/merge-tree.c:341, builtin/mktag.c:156, builtin/notes.c:426
       builtin/notes.c:822, builtin/pack-redundant.c:596,
       builtin/pack-refs.c:10, builtin/patch-id.c:60, builtin/patch-id.c:149,
       builtin/remote.c:1512, builtin/remote-ext.c:240,
       builtin/remote-fd.c:53, builtin/reset.c:236, builtin/send-pack.c:384,
       builtin/unpack-file.c:25, builtin/var.c:75
    
     - These files have symbols which should be marked static since they're
       only file scope:
    
       submodule.c:12, diff.c:631, replace_object.c:92, submodule.c:13,
       submodule.c:14, trace.c:78, transport.c:195, transport-helper.c:79,
       unpack-trees.c:19, url.c:3, url.c:18, url.c:104, url.c:117, url.c:123,
       url.c:129, url.c:136, thread-utils.c:21, thread-utils.c:48
    
     - These files redeclare symbols to be different types:
    
       builtin/index-pack.c:210, parse-options.c:564, parse-options.c:571,
       usage.c:49, usage.c:58, usage.c:63, usage.c:72
    
     - These files use a literal integer 0 when they really should use a NULL
       pointer:
    
       daemon.c:663, fast-import.c:2942, imap-send.c:1072, notes-merge.c:362
    
    While we're in the area, clean up some unused #includes in builtin files
    (mostly exec_cmd.h).
    
    Signed-off-by: Stephen Boyd <bebarino@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Feb 14, 2011
  1. @jrn

    correct type of EMPTY_TREE_SHA1_BIN

    jrn authored committed
    Functions such as hashcmp that expect a binary SHA-1 value take
    parameters of type "unsigned char *" to avoid accepting a textual
    SHA-1 passed by mistake.  Unfortunately, this means passing the string
    literal EMPTY_TREE_SHA1_BIN requires an ugly cast.  Tweak the
    definition of EMPTY_TREE_SHA1_BIN to produce a value of more
    convenient type.
    
    In the future the definition might change to
    
    	extern const unsigned char empty_tree_sha1_bin[20];
    	#define EMPTY_TREE_SHA1_BIN empty_tree_sha1_bin
    
    Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Nov 17, 2010
  1. @jherland

    git notes merge: Add another auto-resolving strategy: "cat_sort_uniq"

    jherland authored committed
    This new strategy is similar to "concatenate", but in addition to
    concatenating the two note candidates, this strategy sorts the resulting
    lines, and removes duplicate lines from the result. This is equivalent to
    applying the "cat | sort | uniq" shell pipeline to the two note candidates.
    
    This strategy is useful if the notes follow a line-based format where one
    wants to avoid duplicate lines in the merge result.
    
    Note that if either of the note candidates contain duplicate lines _prior_
    to the merge, these will also be removed by this merge strategy.
    
    The patch also contains tests and documentation for the new strategy.
    
    Signed-off-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  2. @jherland

    git notes merge: List conflicting notes in notes merge commit message

    jherland authored committed
    This brings notes merge in line with regular merge's behaviour.
    
    This patch has been improved by the following contributions:
    - Ævar Arnfjörð Bjarmason: Don't use C99 comments.
    
    Thanks-to: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
    Signed-off-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  3. @jherland

    git notes merge: Manual conflict resolution, part 2/2

    jherland authored committed
    When the notes merge conflicts in .git/NOTES_MERGE_WORKTREE have been
    resolved, we need to record a new notes commit on the appropriate notes
    ref with the resolved notes.
    
    This patch implements 'git notes merge --commit' which the user should
    run after resolving conflicts in the notes merge worktree. This command
    finalizes the notes merge by recombining the partial notes tree from
    part 1 with the now-resolved conflicts in the notes merge worktree in a
    merge commit, and updating the appropriate ref to this merge commit.
    
    In order to correctly finalize the merge, we need to keep track of three
    things:
    
    - The partial merge result from part 1, containing the auto-merged notes.
      This is now stored into a ref called .git/NOTES_MERGE_PARTIAL.
    - The unmerged notes. These are already stored in
      .git/NOTES_MERGE_WORKTREE, thanks to part 1.
    - The notes ref to be updated by the finalized merge result. This is now
      stored in a symref called .git/NOTES_MERGE_REF.
    
    In addition to "git notes merge --commit", which uses the above details
    to create the finalized notes merge commit, this patch also implements
    "git notes merge --reset", which aborts the ongoing notes merge by simply
    removing the files/directory described above.
    
    FTR, "git notes merge --commit" reuses "git notes merge --reset" to remove
    the information described above (.git/NOTES_MERGE_*) after the notes merge
    have been successfully finalized.
    
    The patch also contains documentation and testcases for the two new options.
    
    This patch has been improved by the following contributions:
    - Ævar Arnfjörð Bjarmason: Fix nonsense sentence in --commit description
    - Sverre Rabbelier: Rename --reset to --abort
    
    Thanks-to: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
    Thanks-to: Sverre Rabbelier <srabbelier@gmail.com>
    Signed-off-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  4. @jherland

    git notes merge: Manual conflict resolution, part 1/2

    jherland authored committed
    Conflicts (that are to be resolved manually) are written into a special-
    purpose working tree, located at .git/NOTES_MERGE_WORKTREE. Within this
    directory, conflicting notes entries are stored (with conflict markers
    produced by ll_merge()) using the SHA1 of the annotated object. The
    .git/NOTES_MERGE_WORKTREE directory will only contain the _conflicting_
    note entries. The non-conflicting note entries (aka. the partial merge
    result) are stored in 'local_tree', and the SHA1 of the resulting commit
    is written to 'result_sha1'. The return value from notes_merge() is -1.
    
    The user is told to edit the files within the .git/NOTES_MERGE_WORKTREE
    directory in order to resolve the conflicts.
    
    The patch also contains documentation and testcases for the correct setup
    of .git/NOTES_MERGE_WORKTREE.
    
    The next part will recombine the partial notes merge result with the
    resolved conflicts in .git/NOTES_MERGE_WORKTREE to produce the complete
    merge result.
    
    This patch has been improved by the following contributions:
    - Jonathan Nieder: Use trace_printf(...) instead of OUTPUT(o, 5, ...)
    
    Thanks-to: Jonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  5. @jherland

    git notes merge: Add automatic conflict resolvers (ours, theirs, union)

    jherland authored committed
    The new -s/--strategy command-line option to 'git notes merge' allow the user
    to choose how notes merge conflicts should be resolved. There are four valid
    strategies to choose from:
    
    1. "manual" (the default): This will let the user manually resolve conflicts.
       This option currently fails with an error message. It will be implemented
       properly in future patches.
    
    2. "ours": This automatically chooses the local version of a conflict, and
       discards the remote version.
    
    3. "theirs": This automatically chooses the remote version of a conflict, and
       discards the local version.
    
    4. "union": This automatically resolves the conflict by appending the remote
       version to the local version.
    
    The strategies are implemented using the combine_notes_* functions from the
    notes.h API.
    
    The patch also includes testcases verifying the correct implementation of
    these strategies.
    
    This patch has been improved by the following contributions:
    - Jonathan Nieder: Future-proof by always checking add_note() return value
    - Stephen Boyd: Use test_commit
    - Stephen Boyd: Use correct option name
    
    Thanks-to: Jonathan Nieder <jrnieder@gmail.com>
    Thanks-to: Stephen Boyd <bebarino@gmail.com>
    Signed-off-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  6. @jherland

    git notes merge: Handle real, non-conflicting notes merges

    jherland authored committed
    This continuation of the 'git notes merge' implementation teaches notes-merge
    to properly do real merges between notes trees: Two diffs are performed, one
    from $base to $remote, and another from $base to $local. The paths in each
    diff are normalized to SHA1 object names. The two diffs are then consolidated
    into a single list of change pairs to be evaluated. Each change pair consist
    of:
    
      - The annotated object's SHA1
      - The $base SHA1 (i.e. the common ancestor notes for this object)
      - The $local SHA1 (i.e. the current notes for this object)
      - The $remote SHA1 (i.e. the to-be-merged notes for this object)
    
    From the pair ($base -> $local, $base -> $remote), we can determine the merge
    result using regular 3-way rules. If conflicts are encountered in this
    process, we fail loudly and exit (conflict handling to be added in a future
    patch), If we can complete the merge without conflicts, the resulting
    notes tree is committed, and the current notes ref updated.
    
    The patch includes added testcases verifying that we can successfully do real
    conflict-less merges.
    
    This patch has been improved by the following contributions:
    - Jonathan Nieder: Future-proof by always checking add_note() return value
    - Stephen Boyd: Use test_commit
    - Jonathan Nieder: Use trace_printf(...) instead of OUTPUT(o, 5, ...)
    - Junio C Hamano: fixup minor style issues
    
    Thanks-to: Jonathan Nieder <jrnieder@gmail.com>
    Thanks-to: Stephen Boyd <bebarino@gmail.com>
    Thanks-to: Junio C Hamano <gitster@pobox.com>
    Signed-off-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  7. @jherland

    builtin/notes.c: Refactor creation of notes commits.

    jherland authored committed
    Create new function create_notes_commit() which is slightly more general than
    commit_notes() (accepts multiple commit parents and does not auto-update the
    notes ref). This function will be used by the notes-merge functionality in
    future patches.
    
    Also rewrite builtin/notes.c:commit_notes() to reuse this new function.
    
    Signed-off-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  8. @jherland

    git notes merge: Initial implementation handling trivial merges only

    jherland authored committed
    This initial implementation of 'git notes merge' only handles the trivial
    merge cases (i.e. where the merge is either a no-op, or a fast-forward).
    
    The patch includes testcases for these trivial merge cases.
    
    Future patches will extend the functionality of 'git notes merge'.
    
    This patch has been improved by the following contributions:
    - Stephen Boyd: Simplify argc logic
    - Stephen Boyd: Use test_commit
    - Ævar Arnfjörð Bjarmason: Don't use C99 comments.
    - Jonathan Nieder: Add constants for common verbosity values
    - Jonathan Nieder: Use trace_printf(...) instead of OUTPUT(o, 5, ...)
    - Jonathan Nieder: Remove extraneous show() function
    - Jonathan Nieder: Clarify handling of empty/missing notes ref in notes_merge()
    - Junio C Hamano: fixup minor style issues
    
    Thanks-to: Stephen Boyd <bebarino@gmail.com>
    Thanks-to: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
    Thanks-to: Jonathan Nieder <jrnieder@gmail.com>
    Thanks-to: Junio C Hamano <gitster@pobox.com>
    Signed-off-by: Johan Herland <johan@herland.net>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Something went wrong with that request. Please try again.