Merge branch 'mv/parseopt-ls-files'
authorJunio C Hamano <gitster@pobox.com>
Fri, 20 Mar 2009 21:30:51 +0000 (14:30 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 20 Mar 2009 21:30:51 +0000 (14:30 -0700)
* mv/parseopt-ls-files:
  ls-files: fix broken --no-empty-directory
  t3000: use test_cmp instead of diff
  parse-opt: migrate builtin-ls-files.
  Turn the flags in struct dir_struct into a single variable

Conflicts:
builtin-ls-files.c
t/t3000-ls-files-others.sh

1  2 
builtin-add.c
builtin-checkout.c
builtin-ls-files.c
dir.c
wt-status.c

diff --cc builtin-add.c
Simple merge
Simple merge
index ca6f33d0466572863db7dbd4c3079dcb06caa4e0,437c366c9e7875aa5003419f1eb03c600b1a1f6f..88e2697aebf11399baf9f9c8b5a63b06a0f83c1d
@@@ -391,135 -486,26 +486,26 @@@ int cmd_ls_files(int argc, const char *
                prefix_offset = strlen(prefix);
        git_config(git_default_config, NULL);
  
-       for (i = 1; i < argc; i++) {
-               const char *arg = argv[i];
-               if (!strcmp(arg, "--")) {
-                       i++;
-                       break;
-               }
-               if (!strcmp(arg, "-z")) {
-                       line_terminator = 0;
-                       continue;
-               }
-               if (!strcmp(arg, "-t") || !strcmp(arg, "-v")) {
-                       tag_cached = "H ";
-                       tag_unmerged = "M ";
-                       tag_removed = "R ";
-                       tag_modified = "C ";
-                       tag_other = "? ";
-                       tag_killed = "K ";
-                       if (arg[1] == 'v')
-                               show_valid_bit = 1;
-                       continue;
-               }
-               if (!strcmp(arg, "-c") || !strcmp(arg, "--cached")) {
-                       show_cached = 1;
-                       continue;
-               }
-               if (!strcmp(arg, "-d") || !strcmp(arg, "--deleted")) {
-                       show_deleted = 1;
-                       require_work_tree = 1;
-                       continue;
-               }
-               if (!strcmp(arg, "-m") || !strcmp(arg, "--modified")) {
-                       show_modified = 1;
-                       require_work_tree = 1;
-                       continue;
-               }
-               if (!strcmp(arg, "-o") || !strcmp(arg, "--others")) {
-                       show_others = 1;
-                       require_work_tree = 1;
-                       continue;
-               }
-               if (!strcmp(arg, "-i") || !strcmp(arg, "--ignored")) {
-                       dir.show_ignored = 1;
-                       require_work_tree = 1;
-                       continue;
-               }
-               if (!strcmp(arg, "-s") || !strcmp(arg, "--stage")) {
-                       show_stage = 1;
-                       continue;
-               }
-               if (!strcmp(arg, "-k") || !strcmp(arg, "--killed")) {
-                       show_killed = 1;
-                       require_work_tree = 1;
-                       continue;
-               }
-               if (!strcmp(arg, "--directory")) {
-                       dir.show_other_directories = 1;
-                       continue;
-               }
-               if (!strcmp(arg, "--no-empty-directory")) {
-                       dir.hide_empty_directories = 1;
-                       continue;
-               }
-               if (!strcmp(arg, "-u") || !strcmp(arg, "--unmerged")) {
-                       /* There's no point in showing unmerged unless
-                        * you also show the stage information.
-                        */
-                       show_stage = 1;
-                       show_unmerged = 1;
-                       continue;
-               }
-               if (!strcmp(arg, "-x") && i+1 < argc) {
-                       exc_given = 1;
-                       add_exclude(argv[++i], "", 0, &dir.exclude_list[EXC_CMDL]);
-                       continue;
-               }
-               if (!prefixcmp(arg, "--exclude=")) {
-                       exc_given = 1;
-                       add_exclude(arg+10, "", 0, &dir.exclude_list[EXC_CMDL]);
-                       continue;
-               }
-               if (!strcmp(arg, "-X") && i+1 < argc) {
-                       exc_given = 1;
-                       add_excludes_from_file(&dir, argv[++i]);
-                       continue;
-               }
-               if (!prefixcmp(arg, "--exclude-from=")) {
-                       exc_given = 1;
-                       add_excludes_from_file(&dir, arg+15);
-                       continue;
-               }
-               if (!prefixcmp(arg, "--exclude-per-directory=")) {
-                       exc_given = 1;
-                       dir.exclude_per_dir = arg + 24;
-                       continue;
-               }
-               if (!strcmp(arg, "--exclude-standard")) {
-                       exc_given = 1;
-                       setup_standard_excludes(&dir);
-                       continue;
-               }
-               if (!strcmp(arg, "--full-name")) {
-                       prefix_offset = 0;
-                       continue;
-               }
-               if (!strcmp(arg, "--error-unmatch")) {
-                       error_unmatch = 1;
-                       continue;
-               }
-               if (!prefixcmp(arg, "--with-tree=")) {
-                       with_tree = arg + 12;
-                       continue;
-               }
-               if (!prefixcmp(arg, "--abbrev=")) {
-                       abbrev = strtoul(arg+9, NULL, 10);
-                       if (abbrev && abbrev < MINIMUM_ABBREV)
-                               abbrev = MINIMUM_ABBREV;
-                       else if (abbrev > 40)
-                               abbrev = 40;
-                       continue;
-               }
-               if (!strcmp(arg, "--abbrev")) {
-                       abbrev = DEFAULT_ABBREV;
-                       continue;
-               }
-               if (*arg == '-')
-                       usage(ls_files_usage);
-               break;
+       argc = parse_options(argc, argv, builtin_ls_files_options,
+                       ls_files_usage, 0);
+       if (show_tag || show_valid_bit) {
+               tag_cached = "H ";
+               tag_unmerged = "M ";
+               tag_removed = "R ";
+               tag_modified = "C ";
+               tag_other = "? ";
+               tag_killed = "K ";
        }
 -      if (show_modified || show_others || (dir.flags & DIR_SHOW_IGNORED) || show_killed)
++      if (show_modified || show_others || show_deleted || (dir.flags & DIR_SHOW_IGNORED) || show_killed)
+               require_work_tree = 1;
+       if (show_unmerged)
+               /*
+                * There's no point in showing unmerged unless
+                * you also show the stage information.
+                */
+               show_stage = 1;
+       if (dir.exclude_per_dir)
+               exc_given = 1;
  
        if (require_work_tree && !is_inside_work_tree())
                setup_work_tree();
diff --cc dir.c
Simple merge
diff --cc wt-status.c
Simple merge