Skip to content

scmpuff vs SCM Breeze

Matthew Rothenberg edited this page Apr 22, 2015 · 3 revisions

How does scmpuff compare with SCM Breeze?

The short version: it does less, but what it does it should do faster and more reliably.

The longer version... There are a number of notable features we don't have (on purpose):

  • Design Asset Management.
  • Keyboard combinations.
  • File indexing/search.
  • ...Pretty much anything beyond numeric filename substitution.

There are also some philosophical differences that underpin the design:

  • “Do one thing well, and avoid doing anything else.”

  • Don't set any environment variables that are unnecessary. scm_breeze has a tendency to pollute the environment with quite a lot of variables, we avoid this as much as possible here.

  • Do as much as possible in cross-platform compiled code, as little as possible in shell script. Shell script can be slow, brittle, and hard to maintain, and in particular is problematic for cross-platform utilities due to subtle difference between implementations. scmpuff contains under 100 lines of shell script total (compared to ~2000 in scm_breeze), and effort is made to keep it as simple as possible.

  • Rigorously test all interactions with the operating system. scmpuff has a robust (and growing) set of integration tests that aim to verify the behavior of the program across different shells and operating systems.

Okay but really, why did you clone SCM Breeze?

Well, you see, I went drinking with some of the IoJS guys and one thing led to another and when I woke up I had a bad hangover and noticed my text editor was open...

Okay in all seriousness, SCM Breeze is a great tool, and has been an indispensable part of my daily workflow for years.

That said, it does a lot more than I need, and I have a bit of an obsession with having my core tools being lean and mean. In addition, the cross-platform story is not great, and functionality on MacOSX/Darwin in particular can be a bit buggy. I've attempted to contribute some patches to SCM Breeze over the years, but felt like it was time for a rewrite with a different focus and philosophy.

That said, I don't see scmpuff as a competitor for scm_breeze, but rather as a complimentary tool for people who may prefer a "lite" version.

Benchmarks

In normal usage I've always found SCM Breeze to be acceptably fast, but scmpuff should be roughly an order of magnitude faster, so here are some informal benchmarks, measured on my 2011 MacBook Air.

Time to init during shell startup:

scm_breeze: 0.09sec
scmpuff:   <0.01sec

Full color numbered status on a complex git repo with ~500 work tree changes:

scm_breeze: 1.14sec*
scmpuff:    0.13sec

Note: scm_breeze normally falls back to normal git status after a configurable $gs_max_changes=150, which I modified here for testing. For comparison, I get about 0.08sec for a plain git status.

Clone this wiki locally