9front - general discussion about 9front
 help / color / mirror / Atom feed
* diff -u
@ 2020-09-20  1:48 ori
  2020-09-21 10:10 ` [9front] " cinap_lenrek
  0 siblings, 1 reply; 2+ messages in thread
From: ori @ 2020-09-20  1:48 UTC (permalink / raw)
  To: 9front

This change gives diff(1) the ability to produce unified diffs
that can be applied with ape/patch

diff -r 730a2ee35853 sys/src/cmd/diff/diff.h
--- a/sys/src/cmd/diff/diff.h	Thu Sep 17 16:11:10 2020 -0700
+++ b/sys/src/cmd/diff/diff.h	Sat Sep 19 12:58:57 2020 -0700
@@ -22,5 +22,6 @@
 void panic(int, char *, ...);
 void check(Biobuf *, Biobuf *);
 void change(int, int, int, int);
+void fileheader(void);
 void flushchanges(void);
 
diff -r 730a2ee35853 sys/src/cmd/diff/diffio.c
--- a/sys/src/cmd/diff/diffio.c	Thu Sep 17 16:11:10 2020 -0700
+++ b/sys/src/cmd/diff/diffio.c	Sat Sep 19 12:58:57 2020 -0700
@@ -303,6 +303,7 @@
 		break;
 	case 'c':
 	case 'a':
+	case 'u':
 		if(nchanges%1024 == 0)
 			changes = erealloc(changes, (nchanges+1024)*sizeof(changes[0]));
 		ch = &changes[nchanges++];
@@ -339,6 +340,15 @@
 }
 
 void
+fileheader(void)
+{
+	if(mode != 'u')
+		return;
+	Bprint(&stdout, "--- %s\n", file1);
+	Bprint(&stdout, "+++ %s\n", file2);
+}
+
+void
 flushchanges(void)
 {
 	int a, b, c, d, at;
@@ -368,20 +378,24 @@
 			d = len[1];
 			j = nchanges;
 		}
-		Bprint(&stdout, "%s:", file1);
-		range(a, b, ",");
-		Bprint(&stdout, " - ");
-		Bprint(&stdout, "%s:", file2);
-		range(c, d, ",");
-		Bputc(&stdout, '\n');
+		if(mode == 'u'){
+			Bprint(&stdout, "@@ -%d,%d +%d,%d @@\n", a, b-a+1, c, d-c+1);
+		}else{
+			Bprint(&stdout, "%s:", file1);
+			range(a, b, ",");
+			Bprint(&stdout, " - ");
+			Bprint(&stdout, "%s:", file2);
+			range(c, d, ",");
+			Bputc(&stdout, '\n');
+		}
 		at = a;
 		for(; i<j; i++){
-			fetch(ixold, at, changes[i].a-1, input[0], "  ");
-			fetch(ixold, changes[i].a, changes[i].b, input[0], "- ");
-			fetch(ixnew, changes[i].c, changes[i].d, input[1], "+ ");
+			fetch(ixold, at, changes[i].a-1, input[0], mode == 'u' ? " " : "  ");
+			fetch(ixold, changes[i].a, changes[i].b, input[0], mode == 'u' ? "-" : "- ");
+			fetch(ixnew, changes[i].c, changes[i].d, input[1], mode == 'u' ? "+" : "- ");
 			at = changes[i].b+1;
 		}
-		fetch(ixold, at, b, input[0], "  ");
+		fetch(ixold, at, b, input[0], mode == 'u' ? " " : "  ");
 	}
 	nchanges = 0;
 }
diff -r 730a2ee35853 sys/src/cmd/diff/diffreg.c
--- a/sys/src/cmd/diff/diffreg.c	Thu Sep 17 16:11:10 2020 -0700
+++ b/sys/src/cmd/diff/diffreg.c	Sat Sep 19 12:58:57 2020 -0700
@@ -285,6 +285,7 @@
 	m = len[0];
 	J[0] = 0;
 	J[m+1] = len[1]+1;
+	fileheader();
 	if (mode != 'e') {
 		for (i0 = 1; i0 <= m; i0 = i1+1) {
 			while (i0 <= m && J[i0] == J[i0-1]+1)
diff -r 730a2ee35853 sys/src/cmd/diff/main.c
--- a/sys/src/cmd/diff/main.c	Thu Sep 17 16:11:10 2020 -0700
+++ b/sys/src/cmd/diff/main.c	Sat Sep 19 12:58:57 2020 -0700
@@ -192,6 +192,7 @@
 			case 'n':
 			case 'c':
 			case 'a':
+			case 'u':
 				mode = *p;
 				break;
 



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [9front] diff -u
  2020-09-20  1:48 diff -u ori
@ 2020-09-21 10:10 ` cinap_lenrek
  0 siblings, 0 replies; 2+ messages in thread
From: cinap_lenrek @ 2020-09-21 10:10 UTC (permalink / raw)
  To: 9front

looks good to me...

--
cinap


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-09-21 10:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-20  1:48 diff -u ori
2020-09-21 10:10 ` [9front] " cinap_lenrek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).