revs->max_count = 3;
                else if (!strcmp(arg, "-q"))
                        silent = 1;
-               else if (!strcmp(arg, "--raw"))
-                       revs->diffopt.output_format = DIFF_FORMAT_RAW;
                else
                        usage(builtin_diff_usage);
                argv++; argc--;
        /* Blob vs file in the working tree*/
        struct stat st;
 
-       while (1 < argc) {
-               const char *arg = argv[1];
-               if (!strcmp(arg, "--raw"))
-                       revs->diffopt.output_format = DIFF_FORMAT_RAW;
-               else
-                       usage(builtin_diff_usage);
-               argv++; argc--;
-       }
+       if (argc > 1)
+               usage(builtin_diff_usage);
+
        if (lstat(path, &st))
                die("'%s': %s", path, strerror(errno));
        if (!(S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)))
         */
        unsigned mode = canon_mode(S_IFREG | 0644);
 
-       while (1 < argc) {
-               const char *arg = argv[1];
-               if (!strcmp(arg, "--raw"))
-                       revs->diffopt.output_format = DIFF_FORMAT_RAW;
-               else
-                       usage(builtin_diff_usage);
-               argv++; argc--;
-       }
+       if (argc > 1)
+               usage(builtin_diff_usage);
+
        stuff_change(&revs->diffopt,
                     mode, mode,
                     blob[1].sha1, blob[0].sha1,
                const char *arg = argv[1];
                if (!strcmp(arg, "--cached"))
                        cached = 1;
-               else if (!strcmp(arg, "--raw"))
-                       revs->diffopt.output_format = DIFF_FORMAT_RAW;
                else
                        usage(builtin_diff_usage);
                argv++; argc--;
 {
        const unsigned char *(sha1[2]);
        int swap = 0;
-       while (1 < argc) {
-               const char *arg = argv[1];
-               if (!strcmp(arg, "--raw"))
-                       revs->diffopt.output_format = DIFF_FORMAT_RAW;
-               else
-                       usage(builtin_diff_usage);
-               argv++; argc--;
-       }
+
+       if (argc > 1)
+               usage(builtin_diff_usage);
 
        /* We saw two trees, ent[0] and ent[1].
         * if ent[1] is unintesting, they are swapped
        const unsigned char (*parent)[20];
        int i;
 
-       while (1 < argc) {
-               const char *arg = argv[1];
-               if (!strcmp(arg, "--raw"))
-                       revs->diffopt.output_format = DIFF_FORMAT_RAW;
-               else
-                       usage(builtin_diff_usage);
-               argv++; argc--;
-       }
+       if (argc > 1)
+               usage(builtin_diff_usage);
+
        if (!revs->dense_combined_merges && !revs->combine_merges)
                revs->dense_combined_merges = revs->combine_merges = 1;
        parent = xmalloc(ents * sizeof(*parent));
 
                options->output_format |= DIFF_FORMAT_PATCH;
        else if (opt_arg(arg, 'U', "unified", &options->context))
                options->output_format |= DIFF_FORMAT_PATCH;
+       else if (!strcmp(arg, "--raw"))
+               options->output_format |= DIFF_FORMAT_RAW;
        else if (!strcmp(arg, "--patch-with-raw")) {
                options->output_format |= DIFF_FORMAT_PATCH | DIFF_FORMAT_RAW;
        }