Merge branch 'master' into next
authorJunio C Hamano <junkio@cox.net>
Sat, 20 May 2006 01:06:08 +0000 (18:06 -0700)
committerJunio C Hamano <junkio@cox.net>
Sat, 20 May 2006 01:06:08 +0000 (18:06 -0700)
* master:
  Fix build procedure for builtin-init-db
  Allow pickaxe and diff-filter options to be used by git log.
  Libify the index refresh logic
  Builtin git-init-db

1  2 
Makefile
builtin-log.c
builtin.h
cache.h
git.c
read-cache.c
update-index.c

diff --cc Makefile
index 06b31d8a25e449b16670b5c54c83357d389252dd,4fd6520b7edf6215c3baf78298ac309883a7935d..abfc07358256219c60d5aabdcbe6879d4c064e3d
+++ b/Makefile
@@@ -170,8 -170,8 +170,9 @@@ PROGRAMS = 
  
  BUILT_INS = git-log$X git-whatchanged$X git-show$X \
        git-count-objects$X git-diff$X git-push$X \
 -      git-grep$X git-rev-list$X git-check-ref-format$X \
 +      git-grep$X git-add$X git-rm$X git-rev-list$X \
-       git-check-ref-format$X
++      git-check-ref-format$X \
+       git-init-db$X
  
  # what 'all' will build and 'install' will install, in gitexecdir
  ALL_PROGRAMS = $(PROGRAMS) $(SIMPLE_PROGRAMS) $(SCRIPTS)
@@@ -219,8 -219,8 +220,8 @@@ LIB_OBJS = 
  
  BUILTIN_OBJS = \
        builtin-log.o builtin-help.o builtin-count.o builtin-diff.o builtin-push.o \
 -      builtin-grep.o builtin-rev-list.o builtin-check-ref-format.o \
 -      builtin-init-db.o
 +      builtin-grep.o builtin-add.o builtin-rev-list.o builtin-check-ref-format.o \
-       builtin-rm.o
++      builtin-rm.o builtin-init-db.o
  
  GITLIBS = $(LIB_FILE) $(XDIFF_LIB)
  LIBS = $(GITLIBS) -lz
diff --cc builtin-log.c
Simple merge
diff --cc builtin.h
index d150c7ce5624e7ece666d6a639fb8e59aa018bed,60541262c462a257cd80d6edb8525b0fbbac0f71..34d5e6a7a9ff2af1b288dca7698d898f41022bb7
+++ b/builtin.h
@@@ -25,9 -24,8 +25,10 @@@ extern int cmd_count_objects(int argc, 
  
  extern int cmd_push(int argc, const char **argv, char **envp);
  extern int cmd_grep(int argc, const char **argv, char **envp);
 +extern int cmd_rm(int argc, const char **argv, char **envp);
 +extern int cmd_add(int argc, const char **argv, char **envp);
  extern int cmd_rev_list(int argc, const char **argv, char **envp);
  extern int cmd_check_ref_format(int argc, const char **argv, char **envp);
+ extern int cmd_init_db(int argc, const char **argv, char **envp);
  
  #endif
diff --cc cache.h
Simple merge
diff --cc git.c
index 63aa31143563323f1318e26ce4fa9f298473c47f,3216d311b2efdd238f0eb023d6a918e0a43b54ab..eab8c1f45208a9d0ffb881f1d0f19f6b13c3dbfb
--- 1/git.c
--- 2/git.c
+++ b/git.c
@@@ -51,9 -50,8 +51,10 @@@ static void handle_internal_command(in
                { "count-objects", cmd_count_objects },
                { "diff", cmd_diff },
                { "grep", cmd_grep },
 +              { "rm", cmd_rm },
 +              { "add", cmd_add },
                { "rev-list", cmd_rev_list },
+               { "init-db", cmd_init_db },
                { "check-ref-format", cmd_check_ref_format }
        };
        int i;
diff --cc read-cache.c
Simple merge
diff --cc update-index.c
index 21448cc5cc3bfc13f2b21675e89f901d0d7067be,7d6de821e23fc02b19b970df94200edd31bc864f..956b6b34f99a447f55fe48ef3ce1eb652524c985
@@@ -148,103 -120,70 +128,6 @@@ static int add_file_to_cache(const cha
        return 0;
  }
  
--/*
-  * "refresh" does not calculate a new sha1 file or bring the
-  * cache up-to-date for mode/content changes. But what it
-  * _does_ do is to "re-match" the stat information of a file
-  * with the cache, so that you can refresh the cache for a
-  * file that hasn't been changed but where the stat entry is
-  * out of date.
 - * We fundamentally don't like some paths: we don't want
 - * dot or dot-dot anywhere, and for obvious reasons don't
 - * want to recurse into ".git" either.
-- *
-  * For example, you'd want to do this after doing a "git-read-tree",
-  * to link up the stat cache details with the proper files.
 - * Also, we don't want double slashes or slashes at the
 - * end that can make pathnames ambiguous.
-- */
- static struct cache_entry *refresh_entry(struct cache_entry *ce, int really)
 -static int verify_dotfile(const char *rest)
--{
-       struct stat st;
-       struct cache_entry *updated;
-       int changed, size;
-       if (lstat(ce->name, &st) < 0)
-               return ERR_PTR(-errno);
-       changed = ce_match_stat(ce, &st, really);
-       if (!changed) {
-               if (really && assume_unchanged &&
-                   !(ce->ce_flags & htons(CE_VALID)))
-                       ; /* mark this one VALID again */
-               else
-                       return NULL;
-       }
-       if (ce_modified(ce, &st, really))
-               return ERR_PTR(-EINVAL);
-       size = ce_size(ce);
-       updated = xmalloc(size);
-       memcpy(updated, ce, size);
-       fill_stat_cache_info(updated, &st);
-       /* In this case, if really is not set, we should leave
-        * CE_VALID bit alone.  Otherwise, paths marked with
-        * --no-assume-unchanged (i.e. things to be edited) will
-        * reacquire CE_VALID bit automatically, which is not
-        * really what we want.
 -      /*
 -       * The first character was '.', but that
 -       * has already been discarded, we now test
 -       * the rest.
--       */
-       if (!really && assume_unchanged && !(ce->ce_flags & htons(CE_VALID)))
-               updated->ce_flags &= ~htons(CE_VALID);
 -      switch (*rest) {
 -      /* "." is not allowed */
 -      case '\0': case '/':
 -              return 0;
--
-       return updated;
 -      /*
 -       * ".git" followed by  NUL or slash is bad. This
 -       * shares the path end test with the ".." case.
 -       */
 -      case 'g':
 -              if (rest[1] != 'i')
 -                      break;
 -              if (rest[2] != 't')
 -                      break;
 -              rest += 2;
 -      /* fallthrough */
 -      case '.':
 -              if (rest[1] == '\0' || rest[1] == '/')
 -                      return 0;
 -      }
 -      return 1;
--}
--
- static int refresh_cache(int really)
 -static int verify_path(const char *path)
--{
-       int i;
-       int has_errors = 0;
-       for (i = 0; i < active_nr; i++) {
-               struct cache_entry *ce, *new;
-               ce = active_cache[i];
-               if (ce_stage(ce)) {
-                       while ((i < active_nr) &&
-                              ! strcmp(active_cache[i]->name, ce->name))
-                               i++;
-                       i--;
-                       if (allow_unmerged)
-                               continue;
-                       printf("%s: needs merge\n", ce->name);
-                       has_errors = 1;
-                       continue;
-               }
 -      char c;
--
-               new = refresh_entry(ce, really);
-               if (!new)
-                       continue;
-               if (IS_ERR(new)) {
-                       if (not_new && PTR_ERR(new) == -ENOENT)
 -      goto inside;
 -      for (;;) {
 -              if (!c)
 -                      return 1;
 -              if (c == '/') {
 -inside:
 -                      c = *path++;
 -                      switch (c) {
 -                      default:
--                              continue;
-                       if (really && PTR_ERR(new) == -EINVAL) {
-                               /* If we are doing --really-refresh that
-                                * means the index is not valid anymore.
-                                */
-                               ce->ce_flags &= ~htons(CE_VALID);
-                               active_cache_changed = 1;
 -                      case '/': case '\0':
 -                              break;
 -                      case '.':
 -                              if (verify_dotfile(path))
 -                                      continue;
--                      }
-                       if (quiet)
-                               continue;
-                       printf("%s: needs update\n", ce->name);
-                       has_errors = 1;
-                       continue;
 -                      return 0;
--              }
-               active_cache_changed = 1;
-               /* You can NOT just free active_cache[i] here, since it
-                * might not be necessarily malloc()ed but can also come
-                * from mmap(). */
-               active_cache[i] = new;
 -              c = *path++;
--      }
-       return has_errors;
--}
--
  static int add_cacheinfo(unsigned int mode, const unsigned char *sha1,
                         const char *path, int stage)
  {