]> Cypherpunks repositories - dsc.git/commitdiff
Escape filename-like lines
authorSergey Matveev <stargrave@stargrave.org>
Fri, 3 Oct 2025 18:12:57 +0000 (21:12 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 3 Oct 2025 18:13:17 +0000 (21:13 +0300)
dsc

diff --git a/dsc b/dsc
index 8a78b285453a86e59bee7a7f8601b1c73bb57798e0ce89b355c43eecfe07165f..e6b411abaf41e12dcf3c77ff020bf244117ec41b1cf17d0d1b48e01254dcbfd1 100755 (executable)
--- a/dsc
+++ b/dsc
@@ -113,6 +113,17 @@ proc assure-exists {opt} {
     }
 }
 
+proc txtar-filename {line} {
+    if {
+        [string length $line] > 6 &&
+        [string range $line 0 2] == "-- " &&
+        [string range $line end-2 end] == " --"
+    } {
+        return [string range $line 3 end-3]
+    }
+    return ""
+}
+
 set opt [lindex $argv 1]
 switch [lindex $argv 0] {
     list {
@@ -254,7 +265,14 @@ switch [lindex $argv 0] {
         foreach dir $dirs {
             foreach fn [walk $dir f] {
                 puts "-- [string range $fn [string length $Saved]+1 end] --"
-                puts -nonewline [fileread $fn]
+                set fh [open $fn]
+                while {[gets $fh line] >= 0} {
+                    if {[txtar-filename $line] != ""} {
+                        set line "-- $line --"
+                    }
+                    puts $line
+                }
+                close $fh
             }
         }
     }
@@ -278,18 +296,17 @@ switch [lindex $argv 0] {
             close $fh
         }
         while {[gets stdin line] >= 0} {
-            if {
-                [string length $line] > 6 &&
-                [string range $line 0 2] == "-- " &&
-                [string range $line end-2 end] == " --"
-            } {
+            set newFn [txtar-filename $line]
+            if {$newFn == ""} {
+                lappend lines $line
+            } elseif {[string range $newFn 0 2] == "-- "} {
+                lappend lines $newFn
+            } else {
                 if {$fn != ""} {
                     filewrite $fn $lines
                     set lines [list]
                 }
-                set fn [string range $line 3 end-3]
-            } else {
-                lappend lines $line
+                set fn $newFn
             }
         }
         if {$fn != ""} {