Merge branch 'master' into lt/apply
authorJunio C Hamano <junkio@cox.net>
Wed, 24 May 2006 21:08:30 +0000 (14:08 -0700)
committerJunio C Hamano <junkio@cox.net>
Wed, 24 May 2006 21:08:30 +0000 (14:08 -0700)
* master: (40 commits)
  Clean up sha1 file writing
  Builtin git-cat-file
  builtin format-patch: squelch content-type for 7-bit ASCII
  CMIT_FMT_EMAIL: Q-encode Subject: and display-name part of From: fields.
  add more informative error messages to git-mktag
  remove the artificial restriction tagsize < 8kb
  git-rebase: use canonical A..B syntax to format-patch
  git-format-patch: now built-in.
  fmt-patch: Support --attach
  fmt-patch: understand old <his> notation
  Teach fmt-patch about --keep-subject
  Teach fmt-patch about --numbered
  fmt-patch: implement -o <dir>
  fmt-patch: output file names to stdout
  Teach fmt-patch to write individual files.
  Use RFC2822 dates from "git fmt-patch".
  git-fmt-patch: thinkofix to show [PATCH] properly.
  rename internal format-patch wip
  Minor tweak on subject line in --pretty=email
  Tentative built-in format-patch.
  ...

1  2 
builtin-apply.c

diff --combined builtin-apply.c
@@@ -11,6 -11,7 +11,7 @@@
  #include "quote.h"
  #include "blob.h"
  #include "delta.h"
+ #include "builtin.h"
  
  //  --check turns on checking that the working tree matches the
  //    files that are being modified, but doesn't apply the patch
@@@ -1333,7 -1334,6 +1334,7 @@@ static int apply_line(char *output, con
  
  static int apply_one_fragment(struct buffer_desc *desc, struct fragment *frag)
  {
 +      int match_beginning, match_end;
        char *buf = desc->buffer;
        const char *patch = frag->patch;
        int offset, size = frag->size;
        newlines = new;
        leading = frag->leading;
        trailing = frag->trailing;
 +
 +      /*
 +       * If we don't have any leading/trailing data in the patch,
 +       * we want it to match at the beginning/end of the file.
 +       */
 +      match_beginning = !leading && (frag->oldpos == 1);
 +      match_end = !trailing;
 +
        lines = 0;
        pos = frag->newpos;
        for (;;) {
                offset = find_offset(buf, desc->size, oldlines, oldsize, pos, &lines);
 +              if (match_end && offset + oldsize != desc->size)
 +                      offset = -1;
 +              if (match_beginning && offset)
 +                      offset = -1;
                if (offset >= 0) {
                        int diff = newsize - oldsize;
                        unsigned long size = desc->size + diff;
                /* Am I at my context limits? */
                if ((leading <= p_context) && (trailing <= p_context))
                        break;
 +              if (match_beginning || match_end) {
 +                      match_beginning = match_end = 0;
 +                      continue;
 +              }
                /* Reduce the number of context lines
                 * Reduce both leading and trailing if they are equal
                 * otherwise just reduce the larger context.
@@@ -2168,7 -2152,7 +2169,7 @@@ static int git_apply_config(const char 
  }
  
  
- int main(int argc, char **argv)
+ int cmd_apply(int argc, const char **argv, char **envp)
  {
        int i;
        int read_stdin = 1;