# UKAEA RSE Team Journal Club: 1 December 2022 :::info - **Location:** K1/0/85 - **Date:** 2022-12-01 - **Article:** [The Architecture of Open Source Applications: Mercurial](https://aosabook.org/en/mercurial.html) - **Agenda** 1. Brief intro `2 min` 2. Discussion `43 min` - **Participants:** - - **Host:** Matthew Bluteau ::: ## Brief Intro - The main idea behind the collection "The Architecture of Open Source Applications" is to learn about good software design and architecture from the actual maintainers of some of the most successful open source projects. - Mercurial seemed like a good choice because it deals with version control and so should help with our general understanding of that important topic. It is also different enough from git to give a bit of variety in terms of how things might be implemented. - Crucially, I have heard anecdotally that Mecurial is more user friendly than Git, meaning looking at its architecture and approach to UI could indeed be quite important for the direction that future VCS tools head. ## Discussion Notes - MB: Comparison to a data-centric design; starts with data model and design follows from that - DS: More thought given to extensibility than git. Do we want to extend git? - Pre-commit, aliases, are these extensions? - Mercurial hooks into 'module' extensions; community contributes modules. Similar to pre-commit Python package. - There are some Git 're-implementations' (at least partial); allows more custom behaviour. - Plugin systems not always needed for extensibility - Git LFS - Git plugin - Mercurial decided on Python for development ease - Noticeable performance hit from Python interpreter starting up for each command? - Could run a Python service underneath? - Does Python impact scalability, compared to compile languange like C? - Why is Git so much more popular? - Linux kernel is big project using Git, giving momemntum - Staging is useful in Git - JN: Likes way Mercurial deals with tags - How does the checkout system work with tags, if checkout out revision pre-dates tag? - Difficult to change history in Mercurial - Can be useful in Git for cleaning development branches - Centralized version control interseting - Need to be connected to central system (usually via interent) to commit changes