mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![Junio C Hamano](/assets/img/avatar_default.png)
This is the first installment to libify diff brothers. The updated diff-files uses revision.c::setup_revisions() infrastructure to parse its command line arguments, which means the pathname arguments are checked more strictly than before. The tests are adjusted to separate possibly missing paths from the rest of arguments with double-dashes, to show the kosher way. As Linus pointed out, renaming diff.c to diff-lib.c was simply stupid, so I am renaming it back. The new diff-lib.c is to contain pieces extracted from diff brothers. Signed-off-by: Junio C Hamano <junkio@cox.net>
55 lines
1.4 KiB
C
55 lines
1.4 KiB
C
/*
|
|
* GIT - The information manager from hell
|
|
*
|
|
* Copyright (C) Linus Torvalds, 2005
|
|
*/
|
|
#include "cache.h"
|
|
#include "diff.h"
|
|
#include "commit.h"
|
|
#include "revision.h"
|
|
|
|
static const char diff_files_usage[] =
|
|
"git-diff-files [-q] [-0/-1/2/3 |-c|--cc] [<common diff options>] [<path>...]"
|
|
COMMON_DIFF_OPTIONS_HELP;
|
|
|
|
int main(int argc, const char **argv)
|
|
{
|
|
struct rev_info rev;
|
|
int silent = 0;
|
|
|
|
git_config(git_diff_config);
|
|
init_revisions(&rev);
|
|
rev.abbrev = 0;
|
|
|
|
argc = setup_revisions(argc, argv, &rev, NULL);
|
|
while (1 < argc && argv[1][0] == '-') {
|
|
if (!strcmp(argv[1], "--base"))
|
|
rev.max_count = 1;
|
|
else if (!strcmp(argv[1], "--ours"))
|
|
rev.max_count = 2;
|
|
else if (!strcmp(argv[1], "--theirs"))
|
|
rev.max_count = 3;
|
|
else if (!strcmp(argv[1], "-q"))
|
|
silent = 1;
|
|
else
|
|
usage(diff_files_usage);
|
|
argv++; argc--;
|
|
}
|
|
/*
|
|
* Make sure there are NO revision (i.e. pending object) parameter,
|
|
* rev.max_count is reasonable (0 <= n <= 3),
|
|
* there is no other revision filtering parameters.
|
|
*/
|
|
if (rev.pending_objects ||
|
|
rev.min_age != -1 || rev.max_age != -1)
|
|
usage(diff_files_usage);
|
|
/*
|
|
* Backward compatibility wart - "diff-files -s" used to
|
|
* defeat the common diff option "-s" which asked for
|
|
* DIFF_FORMAT_NO_OUTPUT.
|
|
*/
|
|
if (rev.diffopt.output_format == DIFF_FORMAT_NO_OUTPUT)
|
|
rev.diffopt.output_format = DIFF_FORMAT_RAW;
|
|
return run_diff_files(&rev, silent);
|
|
}
|