Skip to content

Commit

Permalink
Merge branch 'lt/rev-list' into next
Browse files Browse the repository at this point in the history
* lt/rev-list:
  git-log (internal): more options.
  git-log (internal): add approxidate.
  • Loading branch information
Junio C Hamano committed Mar 1, 2006
2 parents 1025fe5 + 7ae0b0c commit 2b443e0
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 4 deletions.
70 changes: 69 additions & 1 deletion git.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,12 +256,80 @@ static int cmd_log(int argc, char **argv, char **envp)
struct rev_info rev;
struct commit *commit;
char *buf = xmalloc(LOGSIZE);
static enum cmit_fmt commit_format = CMIT_FMT_DEFAULT;
int abbrev = DEFAULT_ABBREV;
int show_parents = 0;
const char *commit_prefix = "commit ";

argc = setup_revisions(argc, argv, &rev, "HEAD");
while (1 < argc) {
char *arg = argv[1];
/* accept -<digit>, like traditilnal "head" */
if ((*arg == '-') && isdigit(arg[1])) {
rev.max_count = atoi(arg + 1);
}
else if (!strcmp(arg, "-n")) {
if (argc < 2)
die("-n requires an argument");
rev.max_count = atoi(argv[2]);
argc--; argv++;
}
else if (!strncmp(arg,"-n",2)) {
rev.max_count = atoi(arg + 2);
}
else if (!strncmp(arg, "--pretty", 8)) {
commit_format = get_commit_format(arg + 8);
if (commit_format == CMIT_FMT_ONELINE)
commit_prefix = "";
}
else if (!strcmp(arg, "--parents")) {
show_parents = 1;
}
else if (!strcmp(arg, "--no-abbrev")) {
abbrev = 0;
}
else if (!strncmp(arg, "--abbrev=", 9)) {
abbrev = strtoul(arg + 9, NULL, 10);
if (abbrev && abbrev < MINIMUM_ABBREV)
abbrev = MINIMUM_ABBREV;
else if (40 < abbrev)
abbrev = 40;
}
else
die("unrecognized argument: %s", arg);
argc--; argv++;
}

prepare_revision_walk(&rev);
setup_pager();
while ((commit = get_revision(&rev)) != NULL) {
pretty_print_commit(CMIT_FMT_DEFAULT, commit, ~0, buf, LOGSIZE, 18);
printf("%s%s", commit_prefix,
sha1_to_hex(commit->object.sha1));
if (show_parents) {
struct commit_list *parents = commit->parents;
while (parents) {
struct object *o = &(parents->item->object);
parents = parents->next;
if (o->flags & TMP_MARK)
continue;
printf(" %s", sha1_to_hex(o->sha1));
o->flags |= TMP_MARK;
}
/* TMP_MARK is a general purpose flag that can
* be used locally, but the user should clean
* things up after it is done with them.
*/
for (parents = commit->parents;
parents;
parents = parents->next)
parents->item->object.flags &= ~TMP_MARK;
}
if (commit_format == CMIT_FMT_ONELINE)
putchar(' ');
else
putchar('\n');
pretty_print_commit(commit_format, commit, ~0, buf,
LOGSIZE, abbrev);
printf("%s\n", buf);
}
free(buf);
Expand Down
5 changes: 2 additions & 3 deletions rev-list.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@
#include "diff.h"
#include "revision.h"

/* bits #0-3 in revision.h */
/* bits #0-4 in revision.h */

#define COUNTED (1u << 4)
#define TMP_MARK (1u << 5) /* for isolated cases; clean after use */
#define COUNTED (1u<<5)

static const char rev_list_usage[] =
"git-rev-list [OPTION] <commit-id>... [ -- paths... ]\n"
Expand Down
20 changes: 20 additions & 0 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,26 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
revs->limited = 1;
continue;
}
if (!strncmp(arg, "--since=", 8)) {
revs->max_age = approxidate(arg + 8);
revs->limited = 1;
continue;
}
if (!strncmp(arg, "--after=", 8)) {
revs->max_age = approxidate(arg + 8);
revs->limited = 1;
continue;
}
if (!strncmp(arg, "--before=", 9)) {
revs->min_age = approxidate(arg + 9);
revs->limited = 1;
continue;
}
if (!strncmp(arg, "--until=", 8)) {
revs->min_age = approxidate(arg + 8);
revs->limited = 1;
continue;
}
if (!strcmp(arg, "--all")) {
handle_all(revs, flags);
continue;
Expand Down
1 change: 1 addition & 0 deletions revision.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#define UNINTERESTING (1u<<1)
#define TREECHANGE (1u<<2)
#define SHOWN (1u<<3)
#define TMP_MARK (1u<<4) /* for isolated cases; clean after use */

struct rev_info {
/* Starting list */
Expand Down

0 comments on commit 2b443e0

Please sign in to comment.