Merge branch 'lt/diffgen' into next
[git.git] / xdiff / xutils.c
index 01e6765..8221806 100644 (file)
 
 int xdl_emit_diffrec(char const *rec, long size, char const *pre, long psize,
                     xdemitcb_t *ecb) {
-       mmbuffer_t mb[2];
+       mmbuffer_t mb[3];
+       int i;
 
        mb[0].ptr = (char *) pre;
        mb[0].size = psize;
        mb[1].ptr = (char *) rec;
        mb[1].size = size;
+       i = 2;
 
-       if (ecb->outf(ecb->priv, mb, 2) < 0) {
+       if (!size || rec[size-1] != '\n') {
+               mb[2].ptr = "\n\\ No newline at end of file\n";
+               mb[2].size = strlen(mb[2].ptr);
+               i = 3;
+       }
+
+       if (ecb->outf(ecb->priv, mb, i) < 0) {
 
                return -1;
        }
@@ -237,20 +245,24 @@ int xdl_emit_hunk_hdr(long s1, long c1, long s2, long c2, xdemitcb_t *ecb) {
 
        nb += xdl_num_out(buf + nb, c1 ? s1: 0);
 
-       memcpy(buf + nb, ",", 1);
-       nb += 1;
+       if (c1 != 1) {
+               memcpy(buf + nb, ",", 1);
+               nb += 1;
 
-       nb += xdl_num_out(buf + nb, c1);
+               nb += xdl_num_out(buf + nb, c1);
+       }
 
        memcpy(buf + nb, " +", 2);
        nb += 2;
 
        nb += xdl_num_out(buf + nb, c2 ? s2: 0);
 
-       memcpy(buf + nb, ",", 1);
-       nb += 1;
+       if (c2 != 1) {
+               memcpy(buf + nb, ",", 1);
+               nb += 1;
 
-       nb += xdl_num_out(buf + nb, c2);
+               nb += xdl_num_out(buf + nb, c2);
+       }
 
        memcpy(buf + nb, " @@\n", 4);
        nb += 4;