1. 24 Jan, 2010 1 commit
    • Junio C Hamano's avatar
      Make ce_uptodate() trustworthy again · 125fd984
      Junio C Hamano authored
      The rule has always been that a cache entry that is ce_uptodate(ce)
      means that we already have checked the work tree entity and we know
      there is no change in the work tree compared to the index, and nobody
      should have to double check.  Note that false ce_uptodate(ce) does not
      mean it is known to be dirty---it only means we don't know if it is
      clean.
      
      There are a few codepaths (refresh-index and preload-index are among
      them) that mark a cache entry as up-to-date based solely on the return
      value from ie_match_stat(); this function uses lstat() to see if the
      work tree entity has been touched, and for a submodule entry, if its
      HEAD points at the same commit as the commit recorded in the index of
      the superproject (a submodule that is not even cloned is considered
      clean).
      
      A submodule is no longer considered unmodified merely because its HEAD
      matches the index of the superproject these days, in order to prevent
      people from forgetting to commit in the submodule and updating the
      superproject index with the new submodule commit, before commiting the
      state in the superproject.  However, the patch to do so didn't update
      the codepath that marks cache entries up-to-date based on the updated
      definition and instead worked it around by saying "we don't trust the
      return value of ce_uptodate() for submodules."
      
      This makes ce_uptodate() trustworthy again by not marking submodule
      entries up-to-date.
      
      The next step _could_ be to introduce a few "in-core" flag bits to
      cache_entry structure to record "this entry is _known_ to be dirty",
      call is_submodule_modified() from ie_match_stat(), and use these new
      bits to avoid running this rather expensive check more than once, but
      that can be a separate patch.
      Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
      125fd984
  2. 23 Jul, 2009 1 commit
  3. 10 Jul, 2009 1 commit
  4. 02 Dec, 2008 1 commit
  5. 17 Nov, 2008 1 commit
    • Linus Torvalds's avatar
      Fix index preloading for racy dirty case · 7c4ea599
      Linus Torvalds authored
      In the threaded index preloading case, we must be sure to always use the
      CE_MATCH_RACY_IS_DIRTY flag when calling ie_match_stat(), in order to make
      sure that we only ever look at the stat() data, and don't try to do
      anything fancy.
      
      Because most of git internals are not thread-safe, and must not be called
      in parallel.
      
      Otherwise, what happens is that if the timestamps indicate that an entry
      _might_ be dirty, we might start actually comparing filesystem data with
      the object database. And we mustn't do that, because that would involve
      looking up and creating the object structure, and that whole code sequence
      with read_sha1_file() where we look up and add objects to the hashes is
      definitely not thread-safe.
      
      Nor do we want to add locking, because the whole point of the preload was
      to be simple and not affect anything else. With CE_MATCH_RACY_IS_DIRTY, we
      get what we wanted, and we'll just leave the hard cases well alone, to be
      done later in the much simpler serial case.
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
      7c4ea599
  6. 15 Nov, 2008 1 commit
    • Linus Torvalds's avatar
      Add cache preload facility · 671c9b7e
      Linus Torvalds authored
      This can do the lstat() storm in parallel, giving potentially much
      improved performance for cold-cache cases or things like NFS that have
      weak metadata caching.
      
      Just use "read_cache_preload()" instead of "read_cache()" to force an
      optimistic preload of the index stat data.  The function takes a
      pathspec as its argument, allowing us to preload only the relevant
      portion of the index.
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
      671c9b7e