Retcon's actually already available on Homebrew—someone kindly added it, unprompted!
10 karma · joined August 19, 2019
Retcon's actually already available on Homebrew—someone kindly added it, unprompted!
Retcon is pretty different: during a rebase, the state of everything is only stored in RAM, not serialized to the repo. So while you can postpone resolving conflicts until you're done putting commits in place, you do have to do so before you go do something else in your repo.
The RAM representation is basically a list of commits (well, commit-likes), what I call a virtual history. It's the history you want to get to, but that's not currently representable with a regular, physical Git history.
Sometimes, just moving things around further is enough to resolve the conflicts, too, if they're simple enough!
It's a regular video recording, and then I noted down the chapter timestamps in an array. (see heroVideoChapterStartTimesSeconds at the very top of https://retcon.app/main.js) As the video is playing, the player uses this to know what chapter to highlight, and how much to fill its progress bar. (that's updateVideoChapters())
So far the implementation goes like this: you enter Edit mode on a commit; you unstage some lines; and you confirm. The lines are yanked from the commit, and added to a new commit that you just have to title. I just use it on the Retcon repo and it's real cool to have.
lazygit is really cool, and is a lot more full-featured than Retcon. But, the core "rewrite with zero friction" feature of Retcon is still unmatched, I think.
For instance: while lazygit does allow you to reorder commits without entering a separate mode, that's only if each move is conflict free. If you have two commits that need to both be moved at once, then in lazygit, you'll have to resort to a regular interactive rebase (so, with the separate planning and execution steps, no undo or preview along the way, etc).
In Retcon, if a commit move results in a conflict, that doesn't matter; you can keep making changes to your history anyway, and then resolve any remaining conflicts when you're ready. It makes the workflow super fluid.
There's probably still a ton Retcon could learn from lazygit/magit/jj, though!
Did the intro maybe give you the impression that TL was built standalone, instead of on Node?
The different extensions are a good idea; my current recommendation is to use .lem.js (for compatibility with editors), so that could be changed to .lem.ts easily!
I'd love to have proper TypeScript support at some point, too.