|
@@ -0,0 +1,43 @@
|
|
1
|
+#!/usr/bin/perl
|
|
2
|
+use strict;
|
|
3
|
+use warnings;
|
|
4
|
+use Cwd qw/ abs_path /;
|
|
5
|
+
|
|
6
|
+my @dirs = qw( ~/blosxom /srv/relief/blosxom );
|
|
7
|
+
|
|
8
|
+s/^~/$ENV{HOME}/ foreach @dirs;
|
|
9
|
+
|
|
10
|
+# do we want to preserve stamp on this file?
|
|
11
|
+sub fits {
|
|
12
|
+ my $dir = abs_path($_[0]);
|
|
13
|
+ my $fits = 0;
|
|
14
|
+ foreach (@dirs) {
|
|
15
|
+ my $wdir = abs_path($_);
|
|
16
|
+ $fits++ if $dir =~ m|^$wdir|;
|
|
17
|
+ }
|
|
18
|
+ return $fits != 0;
|
|
19
|
+}
|
|
20
|
+
|
|
21
|
+# store original stamps
|
|
22
|
+my $original_stamp;
|
|
23
|
+foreach (@ARGV) {
|
|
24
|
+ if ( -f $_ and fits($_) ) {
|
|
25
|
+ $original_stamp->{$_} = (stat($_))[9];
|
|
26
|
+ }
|
|
27
|
+}
|
|
28
|
+
|
|
29
|
+# run vim as you would
|
|
30
|
+my $real_vim = `/usr/bin/env -i which vim`;
|
|
31
|
+chomp $real_vim;
|
|
32
|
+my $cmd = join ' ', $real_vim, @ARGV;
|
|
33
|
+system($cmd) == 0
|
|
34
|
+ or die "vim failed: $!";
|
|
35
|
+
|
|
36
|
+# restore stamps if they have changed
|
|
37
|
+foreach (keys %$original_stamp) {
|
|
38
|
+ next unless -f $_;
|
|
39
|
+ my $current_stamp = (stat($_))[9];
|
|
40
|
+ unless ($current_stamp == $original_stamp->{$_}) {
|
|
41
|
+ utime $original_stamp->{$_}, $original_stamp->{$_}, $_;
|
|
42
|
+ }
|
|
43
|
+}
|