Skip to content

Commit

Permalink
Teach rev-list an option to read revs from the standard input.
Browse files Browse the repository at this point in the history
When --stdin option is given, in addition to the <rev>s listed
on the command line, the command can read one rev parameter per
line from the standard input.  The list of revs ends at the
first empty line or EOF.

Note that you still have to give all the flags from the command
line; only rev arguments (including A..B, A...B, and A^@ notations)
can be give from the standard input.

Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
Junio C Hamano committed Sep 6, 2006
1 parent 5d6f093 commit 42cabc3
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
6 changes: 6 additions & 0 deletions Documentation/git-rev-list.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ SYNOPSIS
[ \--remove-empty ]
[ \--not ]
[ \--all ]
[ \--stdin ]
[ \--topo-order ]
[ \--parents ]
[ [\--objects | \--objects-edge] [ \--unpacked ] ]
Expand Down Expand Up @@ -171,6 +172,11 @@ limiting may be applied.
Pretend as if all the refs in `$GIT_DIR/refs/` are listed on the
command line as '<commit>'.

--stdin::

In addition to the '<commit>' listed on the command
line, read them from the standard input.

--merge::

After a failed merge, show refs that touch files having a
Expand Down
25 changes: 25 additions & 0 deletions builtin-rev-list.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ static const char rev_list_usage[] =
" --no-merges\n"
" --remove-empty\n"
" --all\n"
" --stdin\n"
" ordering output:\n"
" --topo-order\n"
" --date-order\n"
Expand Down Expand Up @@ -304,10 +305,28 @@ static void mark_edges_uninteresting(struct commit_list *list)
}
}

static void read_revisions_from_stdin(struct rev_info *revs)
{
char line[1000];

while (fgets(line, sizeof(line), stdin) != NULL) {
int len = strlen(line);
if (line[len - 1] == '\n')
line[--len] = 0;
if (!len)
break;
if (line[0] == '-')
die("options not supported in --stdin mode");
if (handle_revision_arg(line, revs, 0, 1))
die("bad revision '%s'", line);
}
}

int cmd_rev_list(int argc, const char **argv, const char *prefix)
{
struct commit_list *list;
int i;
int read_from_stdin = 0;

init_revisions(&revs, prefix);
revs.abbrev = 0;
Expand All @@ -329,6 +348,12 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
bisect_list = 1;
continue;
}
if (!strcmp(arg, "--stdin")) {
if (read_from_stdin++)
die("--stdin given twice?");
read_revisions_from_stdin(&revs);
continue;
}
usage(rev_list_usage);

}
Expand Down

0 comments on commit 42cabc3

Please sign in to comment.