builtin-apply.c: simplify calling site to apply_line()
authorJunio C Hamano <gitster@pobox.com>
Wed, 30 Jan 2008 21:19:58 +0000 (13:19 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 5 Feb 2008 08:38:41 +0000 (00:38 -0800)
The function apply_line() changed its behaviour depending on the
ws_error_action, whitespace_error and if the input was a context.
Make its caller responsible for such checking so that we can convert
the function to copy the contents of line while fixing whitespace
breakage more easily.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-apply.c

index 7fb330541fe62a52cef375ef78b8764b4361fe06..d0d008fde14df5346a8e593443aa196728908714 100644 (file)
@@ -1642,7 +1642,7 @@ static void remove_last_line(struct image *img)
        img->len -= img->line[--img->nr].len;
 }
 
-static int apply_line(char *output, const char *patch, int plen,
+static int copy_wsfix(char *output, const char *patch, int plen,
                      unsigned ws_rule)
 {
        /*
@@ -1659,12 +1659,6 @@ static int apply_line(char *output, const char *patch, int plen,
        int need_fix_leading_space = 0;
        char *buf;
 
-       if ((ws_error_action != correct_ws_error) || !whitespace_error ||
-           *patch != '+') {
-               memcpy(output, patch + 1, plen);
-               return plen;
-       }
-
        /*
         * Strip trailing whitespace
         */
@@ -1821,7 +1815,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
        while (size > 0) {
                char first;
                int len = linelen(patch, size);
-               int plen;
+               int plen, added;
                int added_blank_line = 0;
 
                if (!len)
@@ -1866,17 +1860,25 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
                                break;
                /* Fall-through for ' ' */
                case '+':
-                       if (first != '+' || !no_add) {
-                               int added = apply_line(new, patch,
-                                                      plen, ws_rule);
-                               add_line_info(&postimage, new, added,
-                                             (first == '+' ? 0 : LINE_COMMON));
-
-                               new += added;
-                               if (first == '+' &&
-                                   added == 1 && new[-1] == '\n')
-                                       added_blank_line = 1;
+                       /* --no-add does not add new lines */
+                       if (first == '+' && no_add)
+                               break;
+
+                       if (first != '+' ||
+                           !whitespace_error ||
+                           ws_error_action != correct_ws_error) {
+                               memcpy(new, patch + 1, plen);
+                               added = plen;
+                       }
+                       else {
+                               added = copy_wsfix(new, patch, plen, ws_rule);
                        }
+                       add_line_info(&postimage, new, added,
+                                     (first == '+' ? 0 : LINE_COMMON));
+                       new += added;
+                       if (first == '+' &&
+                           added == 1 && new[-1] == '\n')
+                               added_blank_line = 1;
                        break;
                case '@': case '\\':
                        /* Ignore it, we already handled it */