Inspired by On the Graying of GNOME, I thought I’d do some analysis of Emacs and Org’s commit history, to try to gauge the health of their developer communities.

For fun I’ve also thrown in git-of-theseus for the (code) survival plots.

1. Emacs

1.1. Authors

emacs-authors-y.png

1.2. Commits

emacs-commits-y.png emacs-commits-m.png

1.3. Changes

emacs-changes-y.png emacs-changes-m.png

1.4. LOC survival

emac-survival-plot.png

2. Org

2.1. Authors

org-authors-y.png

2.2. Commits

org-commits-y.png org-commits-m.png

2.3. Changes

org-changes-y.png org-changes-m.png

2.4. LOC survival

org-survival-plot.png

3. Methodology

Shell Script
#
sudo python3 -m pip install git-of-theseus

git clone https://github.com/hpjansson/fornalder.git /tmp/fornalder
cd /tmp/fornalder
cargo build --release

# Emacs

git clone https://github.com/emacs-mirror/emacs.git /tmp/emacs
cd /tmp/emacs

git-of-theseus-analyze .
git-of-theseus-stack-plot authors.json
git-of-theseus-survival-plot --exp-fit survival.json

/tmp/fornalder/fornalder --meta emacs-meta.json ingest db.sqlite .

/tmp/fornalder/fornalder --meta emacs-meta.json plot --unit authors db.sqlite authors-y.png\
/tmp/fornalder/fornalder --meta emacs-meta.json plot --unit commits db.sqlite commits-y.png\
/tmp/fornalder/fornalder --meta emacs-meta.json plot --unit changes db.sqlite changes-y.png\
/tmp/fornalder/fornalder --meta emacs-meta.json plot --unit authors --interval month db.sqlite authors-m.png\
/tmp/fornalder/fornalder --meta emacs-meta.json plot --unit commits --interval month db.sqlite commits-m.png\
/tmp/fornalder/fornalder --meta emacs-meta.json plot --unit changes --interval month db.sqlite changs-m.png

# Org

git clone https://code.orgmode.org/bzg/org-mode.git /tmp/orgmode
cd /tmp/orgmode

git-of-theseus-analyze .
git-of-theseus-stack-plot authors.json
git-of-theseus-survival-plot --exp-fit survival.json

/tmp/fornalder/fornalder --meta org-meta.json ingest db.sqlite .

/tmp/fornalder/fornalder --meta org-meta.json plot --unit authors db.sqlite authors-y.png\
/tmp/fornalder/fornalder --meta org-meta.json plot --unit commits db.sqlite commits-y.png\
/tmp/fornalder/fornalder --meta org-meta.json plot --unit changes db.sqlite changes-y.png\
/tmp/fornalder/fornalder --meta org-meta.json plot --unit authors --interval month db.sqlite authors-m.png\
/tmp/fornalder/fornalder --meta org-meta.json plot --unit commits --interval month db.sqlite commits-m.png\
/tmp/fornalder/fornalder --meta org-meta.json plot --unit changes --interval month db.sqlite changs-m.png

3.1. emacs-meta.json

Javascript
#
{
    "name": "Emacs",
    "first_year": 1985,
    "markers":
    [
        { "time": { "year": 1985, "month": 12 }, "row": 0,
          "text": "▼ Emacs 17" },
        { "time": { "year": 1987, "month": 3 }, "row": 1,
          "text": "▼ Emacs 18" },
        { "time": { "year": 1993, "month": 5 }, "row": 0,
          "text": "▼ Emacs 19" },
        { "time": { "year": 1997, "month": 9 }, "row": 0,
          "text": "▼ Emacs 20" },
        { "time": { "year": 2001, "month": 10 }, "row": 0,
          "text": "▼ Emacs 21" },
        { "time": { "year": 2007, "month": 6 }, "row": 0,
          "text": "▼ Emacs 22" },
        { "time": { "year": 2009, "month": 8 }, "row": 1,
          "text": "▼ Emacs 23" },
        { "time": { "year": 2012, "month": 6 }, "row": 0,
          "text": "▼ Emacs 24" },
        { "time": { "year": 2016, "month": 9 }, "row": 0,
          "text": "▼ Emacs 25" }
    ],
    "domains": []
}

3.2. org-meta.json

Javascript
#
{
    "name": "Org",
    "first_year": 2008,
    "markers":
    [
        { "time": { "year": 2008, "month": 4 }, "row": 0,
          "text": "▼ Org 6" },
        { "time": { "year": 2010, "month": 6 }, "row": 0,
          "text": "▼ Org 7" },
        { "time": { "year": 2013, "month": 4 }, "row": 0,
          "text": "▼ Org 8" },
        { "time": { "year": 2016, "month": 11 }, "row": 0,
          "text": "▼ Org 9" }
    ],
    "domains": []
}

Date: 2021-01-10

Author: TEC

Created: 2022-04-12 Tue 15:29