chiark / gitweb /
wip; before reject dirty cache in create
[topbloke.git] / Topbloke.pm
index f1c06154fc41dd1237249fc51c5eee107b68daba..4815b55d16ee06713eb3cb57d31ec333f7869529 100644 (file)
@@ -250,4 +250,35 @@ sub check_no_unwanted_metadata ($) {
                           qw(.topbloke));
 }
 
+sub wf_start ($) {
+    my ($path) = @_;
+    my $fh = new IO::File '>', "$path.tmp" or die "$path.tmp: $!";
+    $writing{$fh} = $path;
+    return [ $fh, $path ];
+}
+
+sub wf ($$) {
+    my ($wf, $data) = @_;
+    print $wf->[0] $data or die "$wf->[1]: $!";
+}
+
+sub wf_abort ($) {
+    my ($wf) = @_;
+    close $wf->[0];
+    unlink $wf->[1] or die "$wf->[1]: $!";
+}
+
+sub wf_done ($) {
+    my ($wf) = @_;
+    close $wf->[0] or die "$wf->[1]: $!";
+    rename $wf->[1].'.tmp', $wf->[1] or die "$wf->[1]: $!";
+}
+
+sub wf_contents ($$) {
+    my ($path,$contents) = @_;
+    my $wf = wf_start($path);
+    wf($wf, $contents);
+    wf_done($wf);
+}
+
 1;