Skip to content
Commits on Jun 13, 2014
  1. @pclouds @gitster

    resolve-undo: be specific what part of the index has changed

    pclouds committed with gitster Jun 13, 2014
    Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  2. @pclouds @gitster

    read-cache: be specific what part of the index has changed

    pclouds committed with gitster Jun 13, 2014
    cache entry additions, removals and modifications are separated
    out. The rest of changes are still in the catch-all flag
    SOMETHING_CHANGED, which would be more specific later.
    
    Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Feb 27, 2014
  1. @gitster

    Merge branch 'nd/submodule-pathspec-ending-with-slash'

    gitster committed Feb 27, 2014
    Allow "git cmd path/", when the 'path' is where a submodule is
    bound to the top-level working tree, to match 'path', despite the
    extra and unnecessary trailing slash.
    
    * nd/submodule-pathspec-ending-with-slash:
      clean: use cache_name_is_other()
      clean: replace match_pathspec() with dir_path_match()
      pathspec: pass directory indicator to match_pathspec_item()
      match_pathspec: match pathspec "foo/" against directory "foo"
      dir.c: prepare match_pathspec_item for taking more flags
      pathspec: rename match_pathspec_depth() to match_pathspec()
      pathspec: convert some match_pathspec_depth() to dir_path_match()
      pathspec: convert some match_pathspec_depth() to ce_path_match()
Commits on Feb 24, 2014
  1. @pclouds @gitster

    pathspec: convert some match_pathspec_depth() to ce_path_match()

    pclouds committed with gitster Jan 24, 2014
    This helps reduce the number of match_pathspec_depth() call sites and
    show how match_pathspec_depth() is used.
    
    Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Nov 18, 2013
  1. @kblees @gitster

    read-cache.c: fix memory leaks caused by removed cache entries

    kblees committed with gitster Nov 14, 2013
    When cache_entry structs are removed from index_state.cache, they are not
    properly freed. Freeing those entries wasn't possible before because we
    couldn't remove them from index_state.name_hash.
    
    Now that we _do_ remove the entries from name_hash, we can also free them.
    Add 'free(cache_entry)' to all call sites of name-hash.c::remove_name_hash
    in read-cache.c (we could free() directly in remove_name_hash(), but
    name-hash.c isn't concerned with cache_entry allocation at all).
    
    Accessing a cache_entry after removing it from the index is now no longer
    allowed, as the memory has been freed. The following functions need minor
    fixes (typically by copying ce->name before use):
     - builtin/rm.c::cmd_rm
     - builtin/update-index.c::do_reupdate
     - read-cache.c::read_index_unmerged
     - resolve-undo.c::unmerge_index_entry_at
    
    Signed-off-by: Karsten Blees <blees@dcon.de>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Sep 9, 2013
  1. @gitster

    Merge branch 'jl/submodule-mv'

    gitster committed Sep 9, 2013
    "git mv A B" when moving a submodule A does "the right thing",
    inclusing relocating its working tree and adjusting the paths in
    the .gitmodules file.
    
    * jl/submodule-mv: (53 commits)
      rm: delete .gitmodules entry of submodules removed from the work tree
      mv: update the path entry in .gitmodules for moved submodules
      submodule.c: add .gitmodules staging helper functions
      mv: move submodules using a gitfile
      mv: move submodules together with their work trees
      rm: do not set a variable twice without intermediate reading.
      t6131 - skip tests if on case-insensitive file system
      parse_pathspec: accept :(icase)path syntax
      pathspec: support :(glob) syntax
      pathspec: make --literal-pathspecs disable pathspec magic
      pathspec: support :(literal) syntax for noglob pathspec
      kill limit_pathspec_to_literal() as it's only used by parse_pathspec()
      parse_pathspec: preserve prefix length via PATHSPEC_PREFIX_ORIGIN
      parse_pathspec: make sure the prefix part is wildcard-free
      rename field "raw" to "_raw" in struct pathspec
      tree-diff: remove the use of pathspec's raw[] in follow-rename codepath
      remove match_pathspec() in favor of match_pathspec_depth()
      remove init_pathspec() in favor of parse_pathspec()
      remove diff_tree_{setup,release}_paths
      convert common_prefix() to use struct pathspec
      ...
Commits on Jul 15, 2013
  1. @pclouds @gitster

    convert unmerge_cache to take struct pathspec

    pclouds committed with gitster Jul 14, 2013
    Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Jul 9, 2013
  1. @pclouds @gitster

    Convert "struct cache_entry *" to "const ..." wherever possible

    pclouds committed with gitster Jul 9, 2013
    I attempted to make index_state->cache[] a "const struct cache_entry **"
    to find out how existing entries in index are modified and where. The
    question I have is what do we do if we really need to keep track of on-disk
    changes in the index. The result is
    
     - diff-lib.c: setting CE_UPTODATE
    
     - name-hash.c: setting CE_HASHED
    
     - preload-index.c, read-cache.c, unpack-trees.c and
       builtin/update-index: obvious
    
     - entry.c: write_entry() may refresh the checked out entry via
       fill_stat_cache_info(). This causes "non-const struct cache_entry
       *" in builtin/apply.c, builtin/checkout-index.c and
       builtin/checkout.c
    
     - builtin/ls-files.c: --with-tree changes stagemask and may set
       CE_UPDATE
    
    Of these, write_entry() and its call sites are probably most
    interesting because it modifies on-disk info. But this is stat info
    and can be retrieved via refresh, at least for porcelain
    commands. Other just uses ce_flags for local purposes.
    
    So, keeping track of "dirty" entries is just a matter of setting a
    flag in index modification functions exposed by read-cache.c. Except
    unpack-trees, the rest of the code base does not do anything funny
    behind read-cache's back.
    
    The actual patch is less valueable than the summary above. But if
    anyone wants to re-identify the above sites. Applying this patch, then
    this:
    
        diff --git a/cache.h b/cache.h
        index 430d021..1692891 100644
        --- a/cache.h
        +++ b/cache.h
        @@ -267,7 +267,7 @@ static inline unsigned int canon_mode(unsigned int mode)
         #define cache_entry_size(len) (offsetof(struct cache_entry,name) + (len) + 1)
    
         struct index_state {
        -	struct cache_entry **cache;
        +	const struct cache_entry **cache;
         	unsigned int version;
         	unsigned int cache_nr, cache_alloc, cache_changed;
         	struct string_list *resolve_undo;
    
    will help quickly identify them without bogus warnings.
    
    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 27, 2013
  1. @pclouds @gitster

    checkout: avoid unnecessary match_pathspec calls

    pclouds committed with gitster Mar 27, 2013
    In checkout_paths() we do this
    
     - for all updated items, call match_pathspec
     - for all items, call match_pathspec (inside unmerge_cache)
     - for all items, call match_pathspec (for showing "path .. is unmerged)
     - for updated items, call match_pathspec and update paths
    
    That's a lot of duplicate match_pathspec(s) and the function is not
    exactly cheap to be called so many times, especially on large indexes.
    This patch makes it call match_pathspec once per updated index entry,
    save the result in ce_flags and reuse the results in the following
    loops.
    
    The changes in 0a1283b (checkout $tree $path: do not clobber local
    changes in $path not in $tree - 2011-09-30) limit the affected paths
    to ones we read from $tree. We do not do anything to other modified
    entries in this case, so the "for all items" above could be modified
    to "for all updated items". But..
    
    The command's behavior now is modified slightly: unmerged entries that
    match $path, but not updated by $tree, are now NOT touched.  Although
    this should be considered a bug fix, not a regression. A new test is
    added for this change.
    
    And while at there, free ps_matched after use.
    
    The following command is tested on webkit, 215k entries. The pattern
    is chosen mainly to make match_pathspec sweat:
    
    git checkout -- "*[a-zA-Z]*[a-zA-Z]*[a-zA-Z]*"
    
            before      after
    real    0m3.493s    0m2.737s
    user    0m2.239s    0m1.586s
    sys     0m1.252s    0m1.151s
    
    Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Jul 5, 2010
  1. @raalkml @gitster

    Convert the users of for_each_string_list to for_each_string_list_ite…

    raalkml committed with gitster Jul 3, 2010
    …m macro
    
    The rule for selecting the candidates for conversion is: if the callback
    function returns only 0 (the condition for for_each_string_list to exit
    early), than it can be safely converted to the macro.
    
    A notable exception are the callers in builtin/remote.c. If converted, the
    readability in the file will suffer greately. Besides, the code is not very
    performance critical (at the moment, at least): it does output formatting of
    the list of remotes.
    
    Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Jun 27, 2010
  1. @qur @gitster

    string_list: Fix argument order for string_list_lookup

    qur committed with gitster Jun 26, 2010
    Update the definition and callers of string_list_lookup to use the
    string_list as the first argument.  This helps make the string_list
    API easier to use by being more consistent.
    
    Signed-off-by: Julian Phillips <julian@quantumfyre.co.uk>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  2. @qur @gitster

    string_list: Fix argument order for string_list_insert

    qur committed with gitster Jun 26, 2010
    Update the definition and callers of string_list_insert to use the
    string_list as the first argument.  This helps make the string_list
    API easier to use by being more consistent.
    
    Signed-off-by: Julian Phillips <julian@quantumfyre.co.uk>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  3. @qur @gitster

    string_list: Fix argument order for for_each_string_list

    qur committed with gitster Jun 26, 2010
    Update the definition and callers of for_each_string_list to use the
    string_list as the first argument.  This helps make the string_list
    API easier to use by being more consistent.
    
    Signed-off-by: Julian Phillips <julian@quantumfyre.co.uk>
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Feb 2, 2010
  1. @gitster

    build: make code "-Wpointer-arith" clean

    gitster committed Feb 1, 2010
    Recently introduced resolve_undo_read() expected arithmetic to (void *)
    to work on byte-addresses.  Correct this.
    
    Noticed by Brandon Casey.
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Commits on Dec 26, 2009
  1. @gitster

    resolve-undo: "checkout -m path" uses resolve-undo information

    gitster committed Dec 25, 2009
    Once you resolved conflicts by "git add path", you cannot recreate the
    conflicted state with "git checkout -m path", because you lost information
    from higher stages in the index when you resolved them.
    
    Since we record the necessary information in the resolve-undo index
    extension these days, we can reproduce the unmerged state in the index and
    check it out.
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
  2. @gitster

    resolve-undo: record resolved conflicts in a new index extension section

    gitster committed Dec 25, 2009
    When resolving a conflict using "git add" to create a stage #0 entry, or
    "git rm" to remove entries at higher stages, remove_index_entry_at()
    function is eventually called to remove unmerged (i.e. higher stage)
    entries from the index.  Introduce a "resolve_undo_info" structure and
    keep track of the removed cache entries, and save it in a new index
    extension section in the index_state.
    
    Operations like "read-tree -m", "merge", "checkout [-m] <branch>" and
    "reset" are signs that recorded information in the index is no longer
    necessary.  The data is removed from the index extension when operations
    start; they may leave conflicted entries in the index, and later user
    actions like "git add" will record their conflicted states afresh.
    
    Signed-off-by: Junio C Hamano <gitster@pobox.com>
Something went wrong with that request. Please try again.