Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Commits on Jan 21, 2008
  1. @torvalds

    Make on-disk index representation separate from in-core one

    torvalds authored
    This converts the index explicitly on read and write to its on-disk
    format, allowing the in-core format to contain more flags, and be
    simpler.
    
    In particular, the in-core format is now host-endian (as opposed to the
    on-disk one that is network endian in order to be able to be shared
    across machines) and as a result we can dispense with all the
    htonl/ntohl on accesses to the cache_entry fields.
    
    This will make it easier to make use of various temporary flags that do
    not exist in the on-disk format.
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Commits on Jan 16, 2008
  1. @gitster

    Improve use of lockfile API

    Brandon Casey authored gitster committed
    Remove remaining double close(2)'s.  i.e. close() before
    commit_locked_index() or commit_lock_file().
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Sep 29, 2007
  1. @MadCoder @gitster

    double free in builtin-update-index.c

    MadCoder authored gitster committed
    path_name is either ptr that should not be freed, or a pointer to a strbuf
    buffer that is deallocated when exiting the loop. Don't do that !
    
    Signed-off-by: Pierre Habouzit <madcoder@debian.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Sep 21, 2007
  1. @MadCoder @gitster

    Rework unquote_c_style to work on a strbuf.

    MadCoder authored gitster committed
    If the gain is not obvious in the diffstat, the resulting code is more
    readable, _and_ in checkout-index/update-index we now reuse the same buffer
    to unquote strings instead of always freeing/mallocing.
    
    This also is more coherent with the next patch that reworks quoting
    functions.
    
    The quoting function is also made more efficient scanning for backslashes
    and treating portions of strings without a backslash at once.
    
    Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Commits on Sep 19, 2007
  1. @gitster

    Merge branch 'master' into ph/strbuf

    gitster authored
    * master: (94 commits)
      Fixed update-hook example allow-users format.
      Documentation/git-svn: updated design philosophy notes
      t/t4014: test "am -3" with mode-only change.
      git-commit.sh: Shell script cleanup
      preserve executable bits in zip archives
      Fix lapsus in builtin-apply.c
      git-push: documentation and tests for pushing only branches
      git-svnimport: Use separate arguments in the pipe for git-rev-parse
      contrib/fast-import: add perl version of simple example
      contrib/fast-import: add simple shell example
      rev-list --bisect: Bisection "distance" clean up.
      rev-list --bisect: Move some bisection code into best_bisection.
      rev-list --bisect: Move finding bisection into do_find_bisection.
      Document ls-files --with-tree=<tree-ish>
      git-commit: partial commit of paths only removed from the index
      git-commit: Allow partial commit of file removal.
      send-email: make message-id generation a bit more robust
      git-apply: fix whitespace stripping
      git-gui: Disable native platform text selection in "lists"
      apply --index-info: fall back to current index for mode changes
      ...
Commits on Sep 18, 2007
  1. @MadCoder @gitster

    Drop strbuf's 'eof' marker, and make read_line a first class citizen.

    MadCoder authored gitster committed
    read_line is now strbuf_getline, and is a first class citizen, it returns 0
    when reading a line worked, EOF else.
    
    The ->eof marker was used non-locally by fast-import.c, mimic the same
    behaviour using a static int in "read_next_command", that now returns -1 on
    EOF, and avoids to call strbuf_getline when it's in EOF state.
    
    Also no longer automagically strbuf_release the buffer, it's counter
    intuitive and breaks fast-import in a very subtle way.
    
    Note: being at EOF implies that command_buf.len == 0.
    
    Signed-off-by: Pierre Habouzit <madcoder@debian.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Sep 17, 2007
  1. @MadCoder @gitster

    Now that cache.h needs strbuf.h, remove useless includes.

    MadCoder authored gitster committed
    Signed-off-by: Pierre Habouzit <madcoder@debian.org>
    Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Sep 14, 2007
  1. @gitster

    Simplify cache API

    gitster authored
    Earlier, add_file_to_index() invalidated the path in the cache-tree
    but remove_file_from_cache() did not, and the user of the latter
    needed to invalidate the entry himself.  This led to a few bugs due to
    missed invalidate calls already.  This patch makes the management of
    cache-tree less error prone by making more invalidate calls from lower
    level cache API functions.
    
    The rules are:
    
     - If you are going to write the index, you should either maintain
       cache_tree correctly.
    
       - If you cannot, alternatively you can remove the entire cache_tree
         by calling cache_tree_free() before you call write_cache().
    
       - When you modify the index, cache_tree_invalidate_path() should be
         called with the path you are modifying, to discard the entry from
         the cache-tree structure.
    
     - The following cache API functions exported from read-cache.c (and
       the macro whose names have "cache" instead of "index")
       automatically call cache_tree_invalidate_path() for you:
    
       - remove_file_from_index();
       - add_file_to_index();
       - add_index_entry();
    
       You can modify the index bypassing the above API functions
       (e.g. find an existing cache entry from the index and modify it in
       place).  You need to call cache_tree_invalidate_path() yourself in
       such a case.
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Sep 10, 2007
  1. @MadCoder @gitster

    Strbuf API extensions and fixes.

    MadCoder authored gitster committed
      * Add strbuf_rtrim to remove trailing spaces.
      * Add strbuf_insert to insert data at a given position.
      * Off-by one fix in strbuf_addf: strbuf_avail() does not counts the final
        \0 so the overflow test for snprintf is the strict comparison. This is
        not critical as the growth mechanism chosen will always allocate _more_
        memory than asked, so the second test will not fail. It's some kind of
        miracle though.
      * Add size extension hints for strbuf_init and strbuf_read. If 0, default
        applies, else:
          + initial buffer has the given size for strbuf_init.
          + first growth checks it has at least this size rather than the
            default 8192.
    
    Signed-off-by: Pierre Habouzit <madcoder@debian.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Aug 10, 2007
  1. @torvalds @gitster

    Fix "git commit directory/" performance anomaly

    torvalds authored gitster committed
    This trivial patch avoids re-hashing files that are already clean in the
    index. This mirrors what commit 0781b8a
    did for "git add .", only for "git commit ." instead.
    
    This improves the cold-cache case immensely, since we don't need to bring
    in all the file contents, just the index and any files dirty in the index.
    
    Before:
    
    	[torvalds@woody linux]$ time git commit .
    	real    1m49.537s
    	user    0m3.892s
    	sys     0m2.432s
    
    After:
    
    	[torvalds@woody linux]$ time git commit .
    	real    0m14.273s
    	user    0m1.312s
    	sys     0m0.516s
    
    (both after doing a "echo 3 > /proc/sys/vm/drop_caches" to get cold-cache
    behaviour - even with the index optimization git still has to "lstat()"
    all the files, so with a truly cold cache, bringing all the inodes in
    will take some time).
    
    [jc: trivial "return 0;" fixed]
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on May 22, 2007
  1. @tali

    rename dirlink to gitlink.

    tali authored Junio C Hamano committed
    Unify naming of plumbing dirlink/gitlink concept:
    
    git ls-files -z '*.[ch]' |
    xargs -0 perl -pi -e 's/dirlink/gitlink/g;' -e 's/DIRLNK/GITLINK/g;'
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Apr 22, 2007
  1. Merge branch 'lt/gitlink'

    Junio C Hamano authored
    * lt/gitlink:
      Tests for core subproject support
      Expose subprojects as special files to "git diff" machinery
      Fix some "git ls-files -o" fallout from gitlinks
      Teach "git-read-tree -u" to check out submodules as a directory
      Teach git list-objects logic to not follow gitlinks
      Fix gitlink index entry filesystem matching
      Teach "git-read-tree -u" to check out submodules as a directory
      Teach git list-objects logic not to follow gitlinks
      Don't show gitlink directories when we want "other" files
      Teach git-update-index about gitlinks
      Teach directory traversal about subprojects
      Fix thinko in subproject entry sorting
      Teach core object handling functions about gitlinks
      Teach "fsck" not to follow subproject links
      Add "S_IFDIRLNK" file mode infrastructure for git links
      Add 'resolve_gitlink_ref()' helper function
      Avoid overflowing name buffer in deep directory structures
      diff-lib: use ce_mode_from_stat() rather than messing with modes manually
Commits on Apr 19, 2007
  1. Merge branch 'maint'

    Junio C Hamano authored
    * maint:
      fix up strtoul_ui error handling
      git-tar-tree: complete deprecation conversion message
  2. @awhitcroft

    fix up strtoul_ui error handling

    awhitcroft authored Junio C Hamano committed
    Two scanf() calls were converted to strtoul_ui() but the return
    values were not updated to match.  scanf() returns the number of
    matched "values" which for this usage is 1 on success.  strtoul_ui()
    return 0 on success.  Update these call sites to match.
    
    Signed-off-by: Andy Whitcroft <apw@shadowen.org>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Apr 15, 2007
  1. @meyering

    sscanf/strtoul: parse integers robustly

    meyering authored Junio C Hamano committed
    * builtin-grep.c (strtoul_ui): Move function definition from here, to...
    * git-compat-util.h (strtoul_ui): ...here, with an added "base" parameter.
    * builtin-grep.c (cmd_grep): Update use of strtoul_ui to include base, "10".
    * builtin-update-index.c (read_index_info): Diagnose an invalid mode integer
    that is out of range or merely larger than INT_MAX.
    (cmd_update_index): Use strtoul_ui, not sscanf.
    * convert-objects.c (write_subdirectory): Likewise.
    
    Signed-off-by: Jim Meyering <jim@meyering.net>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Apr 12, 2007
  1. @torvalds

    Teach git-update-index about gitlinks

    torvalds authored Junio C Hamano committed
    I finally got around to looking at Alex' patch to teach update-index about
    gitlinks too, so that "git commit -a" along with any other explicit
    update-index scripts can work.
    
    I don't think there was anything wrong with Alex' patch, but the code he
    patched I felt was just so ugly that the added cases just pushed it over
    the edge. Especially as I don't think that patch necessarily did the right
    thing for a gitlink entry that already existed in the index, but that
    wasn't actually a real git repository in the working tree (just an empty
    subdirectory or a non-git snapshot because it hadn't wanted to track that
    particular subproject).
    
    So I ended up deciding to clean up the git-update-index handling the same
    way I tackled the directory traversal used by git-add earlier: by
    splitting the different cases up into multiple smaller functions, and just
    making the code easier to read (and adding more comments about the
    different cases).
    
    So this replaces the old "process_file()" with a new "process_path()"
    function that then just calls out to different helper functions depending
    on what kind of path it is. Processing a nondirectory ends up being just
    one of the simpler cases.
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
  2. @meyering

    sscanf/strtoul: parse integers robustly

    meyering authored Junio C Hamano committed
    * builtin-grep.c (strtoul_ui): Move function definition from here, to...
    * git-compat-util.h (strtoul_ui): ...here, with an added "base" parameter.
    * builtin-grep.c (cmd_grep): Update use of strtoul_ui to include base, "10".
    * builtin-update-index.c (read_index_info): Diagnose an invalid mode integer
    that is out of range or merely larger than INT_MAX.
    (cmd_update_index): Use strtoul_ui, not sscanf.
    * convert-objects.c (write_subdirectory): Likewise.
    
    Signed-off-by: Jim Meyering <jim@meyering.net>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Apr 7, 2007
  1. Merge branch 'jc/index-output'

    Junio C Hamano authored
    * jc/index-output:
      git-read-tree --index-output=<file>
      _GIT_INDEX_OUTPUT: allow plumbing to output to an alternative index file.
    
    Conflicts:
    
    	builtin-apply.c
Commits on Apr 5, 2007
  1. Rename internal function "add_file_to_cache" in builtin-update-index.c

    Junio C Hamano authored
    I'd like to consistently name all index-layer functions that
    operate on the default index xxx_cache(), and this application
    specific function interferes with the plan.
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Apr 4, 2007
  1. _GIT_INDEX_OUTPUT: allow plumbing to output to an alternative index f…

    Junio C Hamano authored
    …ile.
    
    When defined, this allows plumbing commands that update the
    index (add, apply, checkout-index, merge-recursive, mv,
    read-tree, rm, update-index, and write-tree) to write their
    resulting index to an alternative index file while holding a
    lock to the original index file.  With this, git-commit that
    jumps the index does not have to make an extra copy of the index
    file, and more importantly, it can do the update while holding
    the lock on the index.
    
    However, I think the interface to let an environment variable
    specify the output is a mistake, as shown in the documentation.
    If a curious user has the environment variable set to something
    other than the file GIT_INDEX_FILE points at, almost everything
    will break.  This should instead be a command line parameter to
    tell these plumbing commands to write the result in the named
    file, to prevent stupid mistakes.
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Mar 3, 2007
  1. Add core.symlinks to mark filesystems that do not support symbolic li…

    Johannes Sixt authored Junio C Hamano committed
    …nks.
    
    Some file systems that can host git repositories and their working copies
    do not support symbolic links. But then if the repository contains a symbolic
    link, it is impossible to check out the working copy.
    
    This patch enables partial support of symbolic links so that it is possible
    to check out a working copy on such a file system.  A new flag
    core.symlinks (which is true by default) can be set to false to indicate
    that the filesystem does not support symbolic links. In this case, symbolic
    links that exist in the trees are checked out as small plain files, and
    checking in modifications of these files preserve the symlink property in
    the database (as long as an entry exists in the index).
    
    Of course, this does not magically make symbolic links work on such defective
    file systems; hence, this solution does not help if the working copy relies
    on that an entry is a real symbolic link.
    
    Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Feb 24, 2007
  1. Evil Merge branch 'jc/status' (early part) into js/diff-ni

    Junio C Hamano authored
    * 'jc/status' (early part):
      run_diff_{files,index}(): update calling convention.
      update-index: do not die too early in a read-only repository.
      git-status: do not be totally useless in a read-only repository.
    
    This is to resolve semantic conflict (which is not textual) that
    changes the calling convention of run_diff_files() early.
Commits on Feb 22, 2007
  1. update-index: do not die too early in a read-only repository.

    Junio C Hamano authored
    This delays the error exit from hold_lock_file_for_update() in
    update-index, so that "update-index --refresh" in a read-only
    repository can still report what paths are stat-dirty before
    exiting.
    
    Also it makes -q to squelch the error message.
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Feb 17, 2007
  1. Do not take mode bits from index after type change.

    Junio C Hamano authored
    When we do not trust executable bit from lstat(2), we copied
    existing ce_mode bits without checking if the filesystem object
    is a regular file (which is the only thing we apply the "trust
    executable bit" business) nor if the blob in the index is a
    regular file (otherwise, we should do the same as registering a
    new regular file, which is to default non-executable).
    
    Noticed by Johannes Sixt.
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Jan 31, 2007
  1. @raalkml

    Fix git-update-index to work with relative pathnames.

    raalkml authored Junio C Hamano committed
    In particular, it fixes the following (typical for cygwin) problem:
    
        $ git-update-index --chmod=-x ../wrapper/Jamfile
        fatal: git-update-index: cannot chmod -x '../wrapper/Jamfile'
    
    Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Nov 23, 2006
  1. trust-executable-bit: fix breakage for symlinks

    Junio C Hamano authored
    An earlier commit f28b34a broke symlinks when trust-executable-bit
    is not set because it incorrectly assumed that everything was a
    regular file.
    
    Reported by Juergen Ruehle.
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Sep 28, 2006
  1. Merge branch 'master' into lj/refs

    Junio C Hamano authored
    * master: (72 commits)
      runstatus: do not recurse into subdirectories if not needed
      grep: fix --fixed-strings combined with expression.
      grep: free expressions and patterns when done.
      Corrected copy-and-paste thinko in ignore executable bit test case.
      An illustration of rev-list --parents --pretty=raw
      Allow git-checkout when on a non-existant branch.
      gitweb: Decode long title for link tooltips
      git-svn: Fix fetch --no-ignore-externals with GIT_SVN_NO_LIB=1
      Ignore executable bit when adding files if filemode=0.
      Remove empty ref directories that prevent creating a ref.
      Use const for interpolate arguments
      git-archive: update documentation
      Deprecate merge-recursive.py
      gitweb: fix over-eager application of esc_html().
      Allow '(no author)' in git-svn's authors file.
      Allow 'svn fetch' on '(no date)' revisions in Subversion.
      git-repack: allow git-repack to run in subdirectory
      Remove upload-tar and make git-tar-tree a thin wrapper to git-archive
      git-tar-tree: Move code for git-archive --format=tar to archive-tar.c
      git-tar-tree: Remove duplicate git_config() call
      ...
Commits on Sep 27, 2006
  1. @spearce

    Ignore executable bit when adding files if filemode=0.

    spearce authored Junio C Hamano committed
    If the user has configured core.filemode=0 then we shouldn't set
    the execute bit in the index when adding a new file as the user
    has indicated that the local filesystem can't be trusted.
    
    This means that when adding files that should be marked executable
    in a repository with core.filemode=0 the user must perform a
    'git update-index --chmod=+x' on the file before committing the
    addition.
    
    Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Sep 22, 2006
  1. @dscho

    Fix git-update-index --again

    dscho authored Junio C Hamano committed
    It called read_ref(git_path(..)..), where read_ref does the git_path()
    stuff itself.
    
    Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Aug 26, 2006
  1. Merge branch 'gl/cleanup'

    Junio C Hamano authored
    * gl/cleanup:
      Convert memset(hash,0,20) to hashclr(hash).
      Convert memcpy(a,b,20) to hashcpy(a,b).
Commits on Aug 24, 2006
  1. update-index -g

    Junio C Hamano authored
    I often find myself typing this but the common abbreviation "g" for
    "again" has not been supported so far for some unknown reason.
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Aug 23, 2006
  1. @spearce

    Convert memcpy(a,b,20) to hashcpy(a,b).

    spearce authored Junio C Hamano committed
    This abstracts away the size of the hash values when copying them
    from memory location to memory location, much as the introduction
    of hashcmp abstracted away hash value comparsion.
    
    A few call sites were using char* rather than unsigned char* so
    I added the cast rather than open hashcpy to be void*.  This is a
    reasonable tradeoff as most call sites already use unsigned char*
    and the existing hashcmp is also declared to be unsigned char*.
    
    [jc: Splitted the patch to "master" part, to be followed by a
     patch for merge-recursive.c which is not in "master" yet.
    
     Fixed the cast in the latter hunk to combine-diff.c which was
     wrong in the original.
    
     Also converted ones left-over in combine-diff.c, diff-lib.c and
     upload-pack.c ]
    
    Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Aug 17, 2006
  1. Do not use memcmp(sha1_1, sha1_2, 20) with hardcoded length.

    David Rientjes authored Junio C Hamano committed
    Introduces global inline:
    
    	hashcmp(const unsigned char *sha1, const unsigned char *sha2)
    
    Uses memcmp for comparison and returns the result based on the length of
    the hash name (a future runtime decision).
    
    Acked-by: Alex Riesen <raa.lkml@gmail.com>
    Signed-off-by: David Rientjes <rientjes@google.com>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Aug 16, 2006
  1. remove unnecessary initializations

    David Rientjes authored Junio C Hamano committed
    [jc: I needed to hand merge the changes to the updated codebase,
     so the result needs to be checked.]
    
    Signed-off-by: David Rientjes <rientjes@google.com>
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Commits on Aug 13, 2006
  1. Better error message when we are unable to lock the index file

    Junio C Hamano authored
    Most of the callers except the one in refs.c use the function to
    update the index file.  Among the index writers, everybody
    except write-tree dies if they cannot open it for writing.
    
    This gives the function an extra argument, to tell it to die
    when it cannot create a new file as the lockfile.
    
    The only caller that does not have to die is write-tree, because
    updating the index for the cache-tree part is optional and not
    being able to do so does not affect the correctness.  I think we
    do not have to be so careful and make the failure into die() the
    same way as other callers, but that would be a different patch.
    
    Signed-off-by: Junio C Hamano <junkio@cox.net>
Something went wrong with that request. Please try again.