path.c: refactor relative_path(), not only strip prefix
[gitweb.git] / builtin / reflog.c
index ebf610e64a267c5ca769d70203b282fb8f96a434..72a0af70c3dcd7d108887cd289bc7b3c606226aa 100644 (file)
@@ -330,8 +330,10 @@ static int expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
                printf("keep %s", message);
        return 0;
  prune:
-       if (!cb->newlog || cb->cmd->verbose)
-               printf("%sprune %s", cb->newlog ? "" : "would ", message);
+       if (!cb->newlog)
+               printf("would prune %s", message);
+       else if (cb->cmd->verbose)
+               printf("prune %s", message);
        return 0;
 }
 
@@ -412,7 +414,7 @@ static int expire_reflog(const char *ref, const unsigned char *sha1, int unused,
                if (cb.unreachable_expire_kind == UE_HEAD) {
                        struct commit_list *elem;
                        for (elem = tips; elem; elem = elem->next)
-                               clear_commit_marks(tip_commit, REACHABLE);
+                               clear_commit_marks(elem->item, REACHABLE);
                        free_commit_list(tips);
                } else {
                        clear_commit_marks(tip_commit, REACHABLE);
@@ -508,26 +510,27 @@ static int parse_expire_cfg_value(const char *var, const char *value, unsigned l
 
 static int reflog_expire_config(const char *var, const char *value, void *cb)
 {
-       const char *lastdot = strrchr(var, '.');
+       const char *pattern, *key;
+       int pattern_len;
        unsigned long expire;
        int slot;
        struct reflog_expire_cfg *ent;
 
-       if (!lastdot || prefixcmp(var, "gc."))
+       if (parse_config_key(var, "gc", &pattern, &pattern_len, &key) < 0)
                return git_default_config(var, value, cb);
 
-       if (!strcmp(lastdot, ".reflogexpire")) {
+       if (!strcmp(key, "reflogexpire")) {
                slot = EXPIRE_TOTAL;
                if (parse_expire_cfg_value(var, value, &expire))
                        return -1;
-       } else if (!strcmp(lastdot, ".reflogexpireunreachable")) {
+       } else if (!strcmp(key, "reflogexpireunreachable")) {
                slot = EXPIRE_UNREACH;
                if (parse_expire_cfg_value(var, value, &expire))
                        return -1;
        } else
                return git_default_config(var, value, cb);
 
-       if (lastdot == var + 2) {
+       if (!pattern) {
                switch (slot) {
                case EXPIRE_TOTAL:
                        default_reflog_expire = expire;
@@ -539,7 +542,7 @@ static int reflog_expire_config(const char *var, const char *value, void *cb)
                return 0;
        }
 
-       ent = find_cfg_ent(var + 3, lastdot - (var+3));
+       ent = find_cfg_ent(pattern, pattern_len);
        if (!ent)
                return -1;
        switch (slot) {
@@ -647,7 +650,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
                init_revisions(&cb.revs, prefix);
                if (cb.verbose)
                        printf("Marking reachable objects...");
-               mark_reachable_objects(&cb.revs, 0);
+               mark_reachable_objects(&cb.revs, 0, NULL);
                if (cb.verbose)
                        putchar('\n');
        }
@@ -777,6 +780,5 @@ int cmd_reflog(int argc, const char **argv, const char *prefix)
        if (!strcmp(argv[1], "delete"))
                return cmd_reflog_delete(argc - 1, argv + 1, prefix);
 
-       /* Not a recognized reflog command..*/
-       usage(reflog_usage);
+       return cmd_log_reflog(argc, argv, prefix);
 }