GitUp uses libgit2 under the hood. GitUpKit is an Obj-C wrapper I wrote at the time to make it much easier to use.
Unlimited undo / redo is achieved by taking a snapshot of the entire repo before and after any operation (e.g. checking out the repo or creating a branch etc...). The inspiration I had at the time was that is it is trivially cheap to take such snapshots: essentially all you need is a list of all the refs.
Then when you need to undo, you have 3 things:
1 - current state of all the refs in the repo
2 - state of all the refs from the before snapshot
3 - state of all the refs from the after snapshot
Compute the delta between 3 -> 2 and apply on top of 1.
The same technique allows to do the Time Machine feature.
> The French have been outdone in so many areas, they're now engaged in a new form of a trade war, which is simply to grab surpluses of foreign companies as they can. And who, even among intelligent, literate people who are responsible enough to grasp material facts is going to care one bit?
When the US fines foreign banks, VW group and others for incredibly higher amounts of money, it's fair-game but when France fines a US company after an 8 years investigation, it's not, and the authorities don't even get the benefit of doubt that maybe they know what they are doing and have a solid case? You don't have any basis to make such a statement that this is only about some revenge.
France was one of the top markets for Apple and had 20 years ago a vibrant network of small retailers dedicated to Apple hardware (without comparison with the distribution situation in the USA). That went downhill once Apple started its online store and then its physical stores. Maybe it's just survival of the fittest, or maybe Apple also tipped the balance in a way that's not ethical or maybe even not legal. That's why we have such government bodies as "Autorité de la Concurrence".
> it seems that Apple was engaged in some otherwise normal business practices.
The "Autorité de la Concurrence" probably has the best grasp compared to anyone on HN regarding what is "normal business practices" and what the law allows in France, which is not the USA.
From TC article, the accusations are rather quite specific:
=======================
The competition commissioner noted that Apple and its partners violated three specific areas:
— Apple and the two wholesalers agreed not to compete with each other and also to prevent other distributors to compete on price, “thereby sterilizing the wholesale market for Apple products.”
— Secondly, premium distributors were forced to keep prices high to keep them at the same level as those of integrated distributors.
— Third, Apple has “abused the economic dependence” of these premium distributors, by subjecting them to unfair and unfavorable commercial conditions compared to its network of integrated distributors. (These last two points relate specifically to the accusations eBizcuss had lodged against the company.)
=======================
It was a known fact at the time (10 years back or so) that independent Apple retailers were not getting stock from Apple for certain products and therefore couldn't meet demand from their customers. There were even some "hot" products that could only be bought from apple.com or its own physical stores. I don't know if some of these practices were illegal or not (that's why we have government bodies to act as arbiters and enforcers of the rules), but it certainly didn't help the retailers.
Believe or not, there are a number of cases where you can work faster in a GUI than the CLI: many operations on the topology of the repo for instance. See somes examples at http://gitup.co/.
GitUp also loads the entire repo history in memory in a very optimized way, which is a key reason why it's so fast. Incidentally, this is something a web app like GitKraken can pretty much only dream of.
GitUp is 30,000 lines of first-party code in Obj-C, mostly built around the OS X SDK. It's simply not portable to other platforms. It would have to be a rewrite which is not going to happen :)
Swift is still very young, constantly evolving, and simply not ready for big projects. Case in point: is there a single Apple app written in Swift yet?
This means that writing GitUp in Swift would be a ton of overhead for very little tangible benefit.
See examples of what well known Mac developers have to go through with Swift: http://inessential.com/swiftdiary. I'd rather spend my time on building the app rather than on dealing with Swift.
GitUpKit is a multi-level API design so you can just use exactly what you need from each level depending on how much control you need (e.g. you can use a raw diff rendering view or a ready-to-use full-featured diff view).
Happy to answer questions if any or just visit http://forums.gitup.co/ where the GitUp community lives.
> So my suggestion is: remove ALL the modification features from the free version, release it as a separate app called "GitUp Viewer" or something, and then sell the version that is actually a git client.
Hmmm... but wouldn't that be exactly the same problem of "slapping users in the face", except now with 2 apps?
There aren't that many options to distribute desktop software:
1) freeware
2) free to use but ads or equivalent
3) paid upfront
4) paid with trial
5) paid with in-app purchase for some features
6) a free basic app and a pro app
#1 and #2 are not an option here and #6 is too much overhead and complicates the user proposition.
I don't see how #3 is not worse than #4 and #5. Not an option either anyway: I truly think people should be able to try before they buy for such a product.
#5 is all the trend on mobile and has been demonstrated to work (I've also done that on a couple desktop software and it seems OK). IMO it's the best of both worlds if done right: you get a free useful product as-is, but pay to get even more value of it.
If you think #5 is a "slap in the face of new users", wouldn't #4 also be that? :)
But yes, I wasn't really worth actively maintaining it as it was feature complete and I didn't intend to build a business out of it.