add diff -a
This commit is contained in:
parent
33baa59ecc
commit
a2d6635774
2 changed files with 30 additions and 13 deletions
|
|
@ -302,6 +302,7 @@ change(int a, int b, int c, int d)
|
||||||
range(a, b, " ");
|
range(a, b, " ");
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
|
case 'a':
|
||||||
if(nchanges%1024 == 0)
|
if(nchanges%1024 == 0)
|
||||||
changes = erealloc(changes, (nchanges+1024)*sizeof(changes[0]));
|
changes = erealloc(changes, (nchanges+1024)*sizeof(changes[0]));
|
||||||
ch = &changes[nchanges++];
|
ch = &changes[nchanges++];
|
||||||
|
|
@ -348,24 +349,39 @@ flushchanges(void)
|
||||||
|
|
||||||
for(i=0; i<nchanges; ){
|
for(i=0; i<nchanges; ){
|
||||||
j = changeset(i);
|
j = changeset(i);
|
||||||
a = changes[i].a;
|
a = changes[i].a-Lines;
|
||||||
b = changes[j-1].b;
|
b = changes[j-1].b+Lines;
|
||||||
c = changes[i].c;
|
c = changes[i].c-Lines;
|
||||||
d = changes[j-1].d;
|
d = changes[j-1].d+Lines;
|
||||||
|
if(a < 1)
|
||||||
|
a = 1;
|
||||||
|
if(c < 1)
|
||||||
|
c = 1;
|
||||||
|
if(b > len[0])
|
||||||
|
b = len[0];
|
||||||
|
if(d > len[1])
|
||||||
|
d = len[1];
|
||||||
|
if(mode == 'a'){
|
||||||
|
a = 1;
|
||||||
|
b = len[0];
|
||||||
|
c = 1;
|
||||||
|
d = len[1];
|
||||||
|
j = nchanges;
|
||||||
|
}
|
||||||
Bprint(&stdout, "%s:", file1);
|
Bprint(&stdout, "%s:", file1);
|
||||||
range(a, b, ",");
|
range(a, b, ",");
|
||||||
Bprint(&stdout, " - ");
|
Bprint(&stdout, " - ");
|
||||||
Bprint(&stdout, "%s:", file2);
|
Bprint(&stdout, "%s:", file2);
|
||||||
range(c, d, ",");
|
range(c, d, ",");
|
||||||
Bputc(&stdout, '\n');
|
Bputc(&stdout, '\n');
|
||||||
at = a-Lines;
|
at = a;
|
||||||
for(; i<j; i++){
|
for(; i<j; i++){
|
||||||
fetch(ixold, at, changes[i].a-1, input[0], " ");
|
fetch(ixold, at, changes[i].a-1, input[0], " ");
|
||||||
fetch(ixold, changes[i].a, changes[i].b, input[0], "< ");
|
fetch(ixold, changes[i].a, changes[i].b, input[0], "< ");
|
||||||
fetch(ixnew, changes[i].c, changes[i].d, input[1], "> ");
|
fetch(ixnew, changes[i].c, changes[i].d, input[1], "> ");
|
||||||
at = changes[i].b+1;
|
at = changes[i].b+1;
|
||||||
}
|
}
|
||||||
fetch(ixold, at, b+Lines, input[0], " ");
|
fetch(ixold, at, b, input[0], " ");
|
||||||
}
|
}
|
||||||
nchanges = 0;
|
nchanges = 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
Biobuf stdout;
|
Biobuf stdout;
|
||||||
|
|
||||||
static char *tmp[] = {"/tmp/diff1", "/tmp/diff2"};
|
static char *tmp[] = {"/tmp/diff1XXXXXXXXXXX", "/tmp/diff2XXXXXXXXXXX"};
|
||||||
static int whichtmp;
|
static int whichtmp;
|
||||||
static char *progname;
|
static char *progname;
|
||||||
static char usage[] = "diff [ -efmnbwr ] file1 ... file2\n";
|
static char usage[] = "diff [ -efmnbwr ] file1 ... file2\n";
|
||||||
|
|
@ -26,8 +26,6 @@ void
|
||||||
done(int status)
|
done(int status)
|
||||||
{
|
{
|
||||||
rmtmpfiles();
|
rmtmpfiles();
|
||||||
Bflush(&stdout);
|
|
||||||
Bterm(&stdout);
|
|
||||||
switch(status)
|
switch(status)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
|
@ -83,8 +81,11 @@ mktmpfile(int input, Dir **sb)
|
||||||
char buf[8192];
|
char buf[8192];
|
||||||
|
|
||||||
atnotify(catch, 1);
|
atnotify(catch, 1);
|
||||||
p = tmp[whichtmp++];
|
/*
|
||||||
|
p = mktemp(tmp[whichtmp++]);
|
||||||
fd = create(p, OWRITE, 0600);
|
fd = create(p, OWRITE, 0600);
|
||||||
|
*/
|
||||||
|
fd = mkstemp(p=tmp[whichtmp++]);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
panic(mflag ? 0: 2, "cannot create %s: %r\n", p);
|
panic(mflag ? 0: 2, "cannot create %s: %r\n", p);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -172,7 +173,6 @@ diff(char *f, char *t, int level)
|
||||||
}
|
}
|
||||||
free(fsb);
|
free(fsb);
|
||||||
free(tsb);
|
free(tsb);
|
||||||
|
|
||||||
Return:
|
Return:
|
||||||
rmtmpfiles();
|
rmtmpfiles();
|
||||||
}
|
}
|
||||||
|
|
@ -189,10 +189,12 @@ main(int argc, char *argv[])
|
||||||
while (--argc && (*++argv)[0] == '-' && (*argv)[1]) {
|
while (--argc && (*++argv)[0] == '-' && (*argv)[1]) {
|
||||||
for (p = *argv+1; *p; p++) {
|
for (p = *argv+1; *p; p++) {
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
case 'c':
|
|
||||||
case 'e':
|
case 'e':
|
||||||
case 'f':
|
case 'f':
|
||||||
case 'n':
|
case 'n':
|
||||||
|
case 'c':
|
||||||
|
case 'a':
|
||||||
mode = *p;
|
mode = *p;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -238,7 +240,6 @@ main(int argc, char *argv[])
|
||||||
free(tsb);
|
free(tsb);
|
||||||
for (i = 0; i < argc-1; i++)
|
for (i = 0; i < argc-1; i++)
|
||||||
diff(argv[i], argv[argc-1], 0);
|
diff(argv[i], argv[argc-1], 0);
|
||||||
|
|
||||||
done(anychange);
|
done(anychange);
|
||||||
/*NOTREACHED*/
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue