aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/fossil/dump.c
diff options
context:
space:
mode:
authorDavid du Colombier <0intro@gmail.com>2013-09-23 23:00:39 +0200
committerDavid du Colombier <0intro@gmail.com>2013-09-23 23:00:39 +0200
commit6f4d00ee45693290fae042b27536b54f77b96acd (patch)
tree60ad31bf16ed2000661c02345dd2a63851588a5d /src/cmd/fossil/dump.c
parentfea86f063930ea187f1c77e93207ac8d39125520 (diff)
downloadplan9port-6f4d00ee45693290fae042b27536b54f77b96acd.tar.gz
plan9port-6f4d00ee45693290fae042b27536b54f77b96acd.tar.bz2
plan9port-6f4d00ee45693290fae042b27536b54f77b96acd.zip
fossil: import from plan 9
R=rsc https://codereview.appspot.com/7988047
Diffstat (limited to 'src/cmd/fossil/dump.c')
-rw-r--r--src/cmd/fossil/dump.c86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/cmd/fossil/dump.c b/src/cmd/fossil/dump.c
new file mode 100644
index 00000000..4ad4f469
--- /dev/null
+++ b/src/cmd/fossil/dump.c
@@ -0,0 +1,86 @@
+/*
+ * Clumsy hack to take snapshots and dumps.
+ */
+#include <u.h>
+#include <libc.h>
+
+void
+usage(void)
+{
+ fprint(2, "usage: fossil/dump [-i snap-interval] [-n name] fscons /n/fossil\n");
+ exits("usage");
+}
+
+char*
+snapnow(void)
+{
+ Tm t;
+ static char buf[100];
+
+ t = *localtime(time(0)-5*60*60); /* take dumps at 5:00 am */
+
+ sprint(buf, "archive/%d/%02d%02d", t.year+1900, t.mon+1, t.mday);
+ return buf;
+}
+
+void
+main(int argc, char **argv)
+{
+ int onlyarchive, cons, s;
+ ulong t, i;
+ char *name;
+
+ name = "main";
+ s = 0;
+ onlyarchive = 0;
+ i = 60*60; /* one hour */
+ ARGBEGIN{
+ case 'i':
+ i = atoi(EARGF(usage()));
+ if(i == 0){
+ onlyarchive = 1;
+ i = 60*60;
+ }
+ break;
+ case 'n':
+ name = EARGF(usage());
+ break;
+ case 's':
+ s = atoi(EARGF(usage()));
+ break;
+ }ARGEND
+
+ if(argc != 2)
+ usage();
+
+ if((cons = open(argv[0], OWRITE)) < 0)
+ sysfatal("open %s: %r", argv[0]);
+
+ if(chdir(argv[1]) < 0)
+ sysfatal("chdir %s: %r", argv[1]);
+
+ rfork(RFNOTEG);
+ switch(fork()){
+ case -1:
+ sysfatal("fork: %r");
+ case 0:
+ break;
+ default:
+ exits(0);
+ }
+
+ /*
+ * pause at boot time to let clock stabilize.
+ */
+ if(s)
+ sleep(s*1000);
+
+ for(;;){
+ if(access(snapnow(), AEXIST) < 0)
+ fprint(cons, "\nfsys %s snap -a\n", name);
+ t = time(0);
+ sleep((i - t%i)*1000+200);
+ if(!onlyarchive)
+ fprint(cons, "\nfsys %s snap\n", name);
+ }
+}