summaryrefslogtreecommitdiff
path: root/sys/src/cmd/hgfs/hgdb.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-10-29 22:00:38 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2012-10-29 22:00:38 +0100
commit559d2fc8359bb9f2c6517861f084b70fe51fc573 (patch)
tree47f8224167e74c1b62e6177b10e887b2a0f9ef59 /sys/src/cmd/hgfs/hgdb.c
parent6812f4679be6b8fcd96bc2cad9c38a8344bae78e (diff)
hgfs: work in progress stuff...
Diffstat (limited to 'sys/src/cmd/hgfs/hgdb.c')
-rw-r--r--sys/src/cmd/hgfs/hgdb.c34
1 files changed, 25 insertions, 9 deletions
diff --git a/sys/src/cmd/hgfs/hgdb.c b/sys/src/cmd/hgfs/hgdb.c
index c835b006b..46a724f32 100644
--- a/sys/src/cmd/hgfs/hgdb.c
+++ b/sys/src/cmd/hgfs/hgdb.c
@@ -1,4 +1,4 @@
-/* hg debug stuff, just dumps dirstate database right now */
+/* hg debug stuff, will become update/merge program */
#include <u.h>
#include <libc.h>
@@ -119,9 +119,9 @@ Error:
}
void
-changes(char *ppath, char *rpath)
+changes(char *lpath, char *rpath, char *apath)
{
- print("diff -r %s %s\n", ppath, rpath);
+ print("local=%s\nremote=%s\nancestor=%s\n", lpath, rpath, apath);
}
void
@@ -134,7 +134,8 @@ usage(void)
void
main(int argc, char *argv[])
{
- char ppath[MAXPATH], rpath[MAXPATH];
+ char lpath[MAXPATH], rpath[MAXPATH], apath[MAXPATH];
+ uchar rhash[HASHSZ], ahash[HASHSZ];
char *mtpt, *rev;
Workdir wd;
@@ -156,15 +157,30 @@ main(int argc, char *argv[])
if(loadworkdir(&wd, *argv) < 0)
sysfatal("loadworkdir: %r");
- print("%s\n%H\n%H\n", wd.path, wd.p1hash, wd.p2hash);
-
if(memcmp(wd.p2hash, nullid, HASHSZ))
sysfatal("outstanding merge");
- snprint(ppath, sizeof(ppath), "%s/%H/files", mtpt, wd.p1hash);
- snprint(rpath, sizeof(rpath), "%s/%s/files", mtpt, rev);
+ snprint(rpath, sizeof(rpath), "%s/%s", mtpt, rev);
+ if(readhash(rpath, "rev", rhash) != 0)
+ sysfatal("unable to get hash for %s", rev);
+
+ if(memcmp(rhash, wd.p1hash, HASHSZ) == 0){
+ fprint(2, "up to date\n");
+ exits(0);
+ }
+
+ ancestor(mtpt, wd.p1hash, rhash, ahash);
+ if(memcmp(ahash, nullid, HASHSZ) == 0)
+ sysfatal("no common ancestor between %H and %H", wd.p1hash, rhash);
+
+ if(memcmp(ahash, rhash, HASHSZ) == 0)
+ memmove(ahash, wd.p1hash, HASHSZ);
- changes(ppath, rpath);
+ snprint(lpath, sizeof(lpath), "%s/%H/files", mtpt, wd.p1hash);
+ snprint(rpath, sizeof(rpath), "%s/%H/files", mtpt, rhash);
+ snprint(apath, sizeof(apath), "%s/%H/files", mtpt, ahash);
+
+ changes(lpath, rpath, apath);
exits(0);
}