author | Junio C Hamano <junkio@cox.net> | |
Sat, 20 May 2006 01:06:08 +0000 (18:06 -0700) | ||
committer | Junio 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
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 | patch | | diff1 | | diff2 | | blob | history |
builtin-log.c | patch | | diff1 | | diff2 | | blob | history |
builtin.h | patch | | diff1 | | diff2 | | blob | history |
cache.h | patch | | diff1 | | diff2 | | blob | history |
git.c | patch | | diff1 | | diff2 | | blob | history |
read-cache.c | patch | | diff1 | | diff2 | | blob | history |
update-index.c | patch | | diff1 | | diff2 | | blob | history |
diff --cc Makefile
index 06b31d8a25e449b16670b5c54c83357d389252dd,4fd6520b7edf6215c3baf78298ac309883a7935d..abfc07358256219c60d5aabdcbe6879d4c064e3d
+++ b/Makefile
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)
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
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
+++ b/git.c
{ "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
--- 1/update-index.c
--- 2/update-index.c
+++ b/update-index.c
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)
{