diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2012-05-02 17:02:14 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2012-05-02 17:02:14 +0100 |
commit | f54e6136216932546b043af37ec3978e197fbe76 (patch) | |
tree | a51ec23d1762be0923006e7264af6264433a45a9 /bin | |
parent | 041db83948dae5b58257c07a33f680d06d4703a0 (diff) | |
download | gitano-f54e6136216932546b043af37ec3978e197fbe76.tar.gz |
BIN: Support tree deltas in gitano-update-hook
Diffstat (limited to 'bin')
-rw-r--r-- | bin/gitano-update-hook | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/bin/gitano-update-hook b/bin/gitano-update-hook index 149c85e..fd9980c 100644 --- a/bin/gitano-update-hook +++ b/bin/gitano-update-hook @@ -119,24 +119,62 @@ end -- First, populate gitano/starttree and gitano/targettree +local function set_list(tag, entries) + table.sort(entries) + entries[#entries+1] = "" + tags[tag] = table.concat({"", unpack(entries)}, "\0") +end + local function populate_tree(tag, tree) local flat_tree = gitano.git.tree.flatten(tree) local names = {} for fn in pairs(flat_tree) do names[#names+1] = fn end - table.sort(names) - names[#names+1] = "" - tags[tag] = table.concat({"", unpack(names)}, "\0") + set_list(tag, names) end populate_tree("gitano/starttree", oldtree) populate_tree("gitano/targettree", newtree) --- TODO: Now gitano/treedelta +-- Now gitano/treedelta local delta = oldtree:diff_to(newtree) +local targets, added, deleted, modified, renamed, renamedto = + {}, {}, {}, {}, {}, {} + +for i = 1, #delta do + local details = delta[i] + local fname = details.filename + targets[#targets+1] = fname + if details.action == "A" then + added[#added+1] = fname + end + if details.action == "C" and details.score == "100" then + added[#added+1] = fname + end + if details.action == "D" then + deleted[#deleted+1] = fname + end + if details.action == "M" or + ((details.action == "R" or details.action == "C") and + (tonumber(details.score) < 100)) then + modified[#modified+1] = fname + end + if details.action == "R" then + renamed[#renamed+1] = details.src_name + renamedto[#renamedto+1] = fname + end + tags["gitano/treediff/kind/" .. fname] = details.endkind + tags["gitano/treediff/oldkind/" .. fname] = details.startkind +end +set_list("gitano/treediff/targets", targets) +set_list("gitano/treediff/added", added) +set_list("gitano/treediff/deleted", deleted) +set_list("gitano/treediff/modified", modified) +set_list("gitano/treediff/renamed", renamed) +set_list("gitano/treediff/renamedto", renamedto) -- Run the ruleset given the tagset |