snaptoken / leg

Tools for making step-by-step code walkthroughs
MIT License
132 stars 2 forks source link

Support repo format where each file has its own separate chain of commits #31

Open paigeruten opened 6 years ago

paigeruten commented 6 years ago

git rebase takes a long time to rewrite history, which may start becoming unacceptable for tutorials as large as lua-tutorial. However, large projects like lua tend to be already split up into many files, and if a tutorial only makes changes to one file per step (as I think they should), there's no reason to spend time rewriting the entire git history since there can only be conflicts with other steps that change that one file.

So the git repo would consist of multiple roots/branches, each one referencing the chain of commits that modify one particular file. There would have to be some kind of manifest file somewhere that would specify the order of steps between all the different files, which leg would have to keep track of (I don't think the user would ever want to have to deal with that themselves).

There should still be the option of using the normal git format, and the ability to switch between the two, in case users want a repo they can go in and edit by hand.

paigeruten commented 6 years ago

Changing multiple files per step could actually be supported, by having the manifest file map multiple commits to a single step. I'm thining the manifest file would be a text file where each line would describe a step, in order. So each line would have a list of commit hashes that are part of that step.

Also, I think the "normal git format" should be a separate Representation, which can be gotten by running leg export, and imported back in with leg import.