# HG changeset patch # User Josef "Jeff" Sipek # Date 1161461951 14400 # Node ID ad4b5ef8a0516d60c35209d06750ba536bcdc638 # Parent afb106e08cda0e51a8e7cb5ecfbd5e5fc05d75fd Build git trees in a recursive manner - not just one flat tree per repo diff -r afb106e08cda -r ad4b5ef8a051 hgext/gitserve.py --- a/hgext/gitserve.py Sat Oct 21 15:22:08 2006 -0400 +++ b/hgext/gitserve.py Sat Oct 21 16:19:11 2006 -0400 @@ -283,6 +283,25 @@ f.write("%s %s\n" % (k, node.hex(g2h[k]))) f.close() + def buildtrees(dirs): + print dirs + + tree = "" + for name in dirs.keys(): + if dirs[name].__class__ == dict: + # a directory + hash = node.bin(buildtrees(dirs[name])) + mode = "40000" + else: + hash = dirs[name] + mode = "100644" + + print "%s %s\0%s"%(mode,name,node.hex(hash)) + + tree+="%s %s\0%s"%(mode,name,hash) + + return make_tree_object(tree) + ## if usemap: @@ -301,15 +320,23 @@ if not h2g.has_key(pars[1]) and pars[1] != node.nullid: gitobject(ui, repo, pars[1], False) - (hgmanifest, user, t, files, hgmsg) = repo.changelog.read(r) + (hgmanifest, user, t, files, hgmsg, extra) = repo.changelog.read(r) tree = "" + dirs = {} mmap = repo.manifest.read(hgmanifest) for name in mmap.keys(): githash = make_file_object(repo, name, mmap[name]) - tree += "%s %s\0%s" % ("100644", name, node.bin(githash)) - gittree = make_tree_object(tree) + pn = name.split("/") + d = dirs + for p in pn[:-1]: + if not d.has_key(p): + d[p] = {} + d = d[p] + d[pn[-1]] = node.bin(githash) + + gittree = buildtrees(dirs) try: lastline = hgmsg.split("\n")[-2]