This project is for recompiling a protections table, to remove redundancy. It is supplied as a sort of proof of concept at the moment. Do NOT use for any enterprise application. But if you are looking at how to solve this problem, here is how I did it. It really needs some heavy refactoring to get rid of the procedural style of things that has crept into the design. RUNNING p4re-prot.rb under the ./lib directory will take the config options from ./lib/configuration/config.rb (only really uses checkpoint value, the others are inteded for validation). re-prot-setup.rb does the some ina less messy fashion, the odd code style was for the messy tests that were quickly thrown up around the code. HOW DOES IT WORK? We create a tree structure in memory, that mimics the directory tree of the perforce server. For each node of the tree, we add the access level each user/group has at that path. For the re-compilation, we traverse the tree and look for duplicates and redundancy (though some is removed earlier), removing these from the tree. We then output the tree that is left as a protections table. WHERE ARE MY SPECS? The test specs are also not provided, because they were badly written, and not really helping prove anything. They require a re-write, though re-writing the tests would highlight the refactoring that needs to take place, a feat I don't currently have time for. VALIDATION In terms of validation, it is a problem that i didn't get round to before losing my perforce license, and therefore ability to create reasonable test cases. To test the output protections table in a truely meaningful way, the only method I could come up with is to fire up two instances of the perforce server one with the old protections, one with the new; then for each user/group find the protection level for each known directory/file on both servers and compare. Heavy handed; but to be sure that the protections are the same they MUST be tested using the actual Perforce Server binary.