Code

Merge branch 'maint'
authorJunio C Hamano <gitster@pobox.com>
Wed, 11 Feb 2009 05:30:45 +0000 (21:30 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 11 Feb 2009 05:30:45 +0000 (21:30 -0800)
* maint:
  Clear the delta base cache during fast-import checkpoint

1  2 
cache.h
fast-import.c
sha1_file.c

diff --combined cache.h
index 2d889deb264f189e16c2e9d2fc9d6fb795180773,3a33b1e82b0db66fad1e0ce45380c8b847aad15f..d8ba693146640ccac688f9d07f9f5e7c332d3923
+++ b/cache.h
@@@ -371,8 -371,6 +371,8 @@@ static inline enum object_type object_t
  #define GITATTRIBUTES_FILE ".gitattributes"
  #define INFOATTRIBUTES_FILE "info/attributes"
  #define ATTRIBUTE_MACRO_PREFIX "[attr]"
 +#define GIT_NOTES_REF_ENVIRONMENT "GIT_NOTES_REF"
 +#define GIT_NOTES_DEFAULT_REF "refs/notes/commits"
  
  extern int is_bare_repository_cfg;
  extern int is_bare_repository(void);
@@@ -544,7 -542,6 +544,7 @@@ enum rebase_setup_type 
  
  extern enum branch_track git_branch_track;
  extern enum rebase_setup_type autorebase;
 +extern char *notes_ref_name;
  
  #define GIT_REPO_VERSION 0
  extern int repository_format_version;
@@@ -638,6 -635,9 +638,6 @@@ extern int write_sha1_file(void *buf, u
  extern int pretend_sha1_file(void *, unsigned long, enum object_type, unsigned char *);
  extern int force_object_loose(const unsigned char *sha1, time_t mtime);
  
 -/* just like read_sha1_file(), but non fatal in presence of bad objects */
 -extern void *read_object(const unsigned char *sha1, enum object_type *type, unsigned long *size);
 -
  /* global flag to enable extra checks when accessing packed objects */
  extern int do_check_packed_object_crc;
  
@@@ -670,7 -670,6 +670,7 @@@ extern int read_ref(const char *filenam
  extern const char *resolve_ref(const char *path, unsigned char *sha1, int, int *);
  extern int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref);
  extern int dwim_log(const char *str, int len, unsigned char *sha1, char **ref);
 +extern int interpret_nth_last_branch(const char *str, struct strbuf *);
  
  extern int refname_match(const char *abbrev_name, const char *full_name, const char **rules);
  extern const char *ref_rev_parse_rules[];
@@@ -725,10 -724,6 +725,10 @@@ struct checkout 
  
  extern int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath);
  extern int has_symlink_leading_path(int len, const char *name);
 +extern int has_symlink_or_noent_leading_path(int len, const char *name);
 +extern int has_dirs_only_path(int len, const char *name, int prefix_len);
 +extern void invalidate_lstat_cache(int len, const char *name);
 +extern void clear_lstat_cache(void);
  
  extern struct alternate_object_database {
        struct alternate_object_database *next;
@@@ -830,6 -825,7 +830,7 @@@ extern unsigned char* use_pack(struct p
  extern void close_pack_windows(struct packed_git *);
  extern void unuse_pack(struct pack_window **);
  extern void free_pack_by_name(const char *);
+ extern void clear_delta_base_cache(void);
  extern struct packed_git *add_packed_git(const char *, int, int);
  extern const unsigned char *nth_packed_object_sha1(struct packed_git *, uint32_t);
  extern off_t nth_packed_object_offset(const struct packed_git *, uint32_t);
@@@ -945,6 -941,7 +946,6 @@@ extern int ws_fix_copy(char *, const ch
  extern int ws_blank_line(const char *line, int len, unsigned ws_rule);
  
  /* ls-files */
 -int pathspec_match(const char **spec, char *matched, const char *filename, int skiplen);
  int report_path_error(const char *ps_matched, const char **pathspec, int prefix_offset);
  void overlay_tree_on_cache(const char *tree_name, const char *prefix);
  
diff --combined fast-import.c
index 1935206be04f3ecc52512958879734b0895d1953,23e970d581ad00c97ba8ea870c0e43b16258b219..03b13e0621e100b1c52a0384fbfe81aede9beb16
@@@ -150,7 -150,6 +150,7 @@@ Format of STDIN stream
  #include "refs.h"
  #include "csum-file.h"
  #include "quote.h"
 +#include "exec_cmd.h"
  
  #define PACK_ID_BITS 16
  #define MAX_PACK_ID ((1<<PACK_ID_BITS)-1)
@@@ -945,6 -944,7 +945,7 @@@ static void end_packfile(void
  {
        struct packed_git *old_p = pack_data, *new_p;
  
+       clear_delta_base_cache();
        if (object_count) {
                char *idx_name;
                int i;
@@@ -2407,8 -2407,6 +2408,8 @@@ int main(int argc, const char **argv
  {
        unsigned int i, show_stats = 1;
  
 +      git_extract_argv0_path(argv[0]);
 +
        setup_git_directory();
        git_config(git_pack_config, NULL);
        if (!pack_compression_seen && core_compression_seen)
diff --combined sha1_file.c
index 8868b800cbb9259f97b8acac3c8701153118b657,d64f28f8ca5aa841fe5db5d81f0fdee8df6618a4..7459a9cd825907ba0ef48e06e4f46b5c14e1a8ff
@@@ -1663,6 -1663,13 +1663,13 @@@ static inline void release_delta_base_c
        }
  }
  
+ void clear_delta_base_cache(void)
+ {
+       unsigned long p;
+       for (p = 0; p < MAX_DELTA_CACHE; p++)
+               release_delta_base_cache(&delta_base_cache[p]);
+ }
  static void add_delta_base_cache(struct packed_git *p, off_t base_offset,
        void *base, unsigned long base_size, enum object_type type)
  {
        delta_base_cache_lru.prev = &ent->lru;
  }
  
 +static void *read_object(const unsigned char *sha1, enum object_type *type,
 +                       unsigned long *size);
 +
  static void *unpack_delta_entry(struct packed_git *p,
                                struct pack_window **w_curs,
                                off_t curpos,
@@@ -2133,8 -2137,8 +2140,8 @@@ int pretend_sha1_file(void *buf, unsign
        return 0;
  }
  
 -void *read_object(const unsigned char *sha1, enum object_type *type,
 -                unsigned long *size)
 +static void *read_object(const unsigned char *sha1, enum object_type *type,
 +                       unsigned long *size)
  {
        unsigned long mapsize;
        void *map, *buf;