Quick viewing(Text Mode)

Distributed Development with Bazaar

Overview An extremely flexible tool Example: the management of ABINIT The end

Distributed development with Bazaar

Yann Pouillon

1. Facultad de Químicas, Universidad del País Vasco UPV/EHU, Donostia-San Sebastián, Spain. 2. European Theoretical Spectroscopy Facility (ETSF), Spain.

CECAM Tutorial — Zaragoza, Spain 2010/06/21 Overview An extremely flexible tool Example: the management of ABINIT The end

Outline

1 Overview An evolutionary process Quick tour of Bazaar 2.1

2 An extremely flexible tool Keeping up with an evolving project Popular Bazaar workflows

3 Example: the management of ABINIT Sustaining the growth of the code The ABINIT Forge Overview An extremely flexible tool Example: the management of ABINIT The end

Outline

1 Overview An evolutionary process Quick tour of Bazaar 2.1

2 An extremely flexible tool Keeping up with an evolving project Popular Bazaar workflows

3 Example: the management of ABINIT Sustaining the growth of the code The ABINIT Forge Overview An extremely flexible tool Example: the management of ABINIT The end

Different times, different challenges, different models

1970’s: first steps (SCCS times) VCS = tool to keep history of single files weave method: uniform data retrieval time outcome: SCCS adopted by Unix 1980’s: from solo to team work (RCS times) independent streams of development project management & VCS decoupled outcome: data retrieval efficiency & reliability 1990’s: organizing collaboration (CVS times) golden age of client-server model uprising of the centralized model outcome: atomicity, file management, deployment 2000’s: going back to freedom emergence of the distributed model explosion of "ecological diversity" outcome: better flexibility, usability & scaling Overview An extremely flexible tool Example: the management of ABINIT The end

Different times, different challenges, different models

1970’s: first steps (SCCS times) VCS = tool to keep history of single files weave method: uniform data retrieval time outcome: SCCS adopted by Unix 1980’s: from solo to team work (RCS times) independent streams of development project management & VCS decoupled outcome: data retrieval efficiency & reliability 1990’s: organizing collaboration (CVS times) golden age of client-server model uprising of the centralized model outcome: atomicity, file management, deployment 2000’s: going back to freedom emergence of the distributed model explosion of "ecological diversity" outcome: better flexibility, usability & scaling Overview An extremely flexible tool Example: the management of ABINIT The end

Different times, different challenges, different models

1970’s: first steps (SCCS times) VCS = tool to keep history of single files weave method: uniform data retrieval time outcome: SCCS adopted by Unix 1980’s: from solo to team work (RCS times) independent streams of development project management & VCS decoupled outcome: data retrieval efficiency & reliability 1990’s: organizing collaboration (CVS times) golden age of client-server model uprising of the centralized model outcome: atomicity, file management, deployment 2000’s: going back to freedom emergence of the distributed model explosion of "ecological diversity" outcome: better flexibility, usability & scaling Overview An extremely flexible tool Example: the management of ABINIT The end

Different times, different challenges, different models

1970’s: first steps (SCCS times) VCS = tool to keep history of single files weave method: uniform data retrieval time outcome: SCCS adopted by Unix 1980’s: from solo to team work (RCS times) independent streams of development project management & VCS decoupled outcome: data retrieval efficiency & reliability 1990’s: organizing collaboration (CVS times) golden age of client-server model uprising of the centralized model outcome: atomicity, file management, deployment 2000’s: going back to freedom emergence of the distributed model explosion of "ecological diversity" outcome: better flexibility, usability & scaling Overview An extremely flexible tool Example: the management of ABINIT The end

The centralized model

Strength: control Individualistic (driving force = project leader) Requires a server Requires permanent connection to the server Snapshotting & publishing tightly bound

Associated social model: benevolent dictatorship

Subversion: "subvert the beast" Since 2000: overcome CVS limits while keeping compatibility Today: probably the most popular for the centralized model Reason: smooth transition from CVS Overview An extremely flexible tool Example: the management of ABINIT The end

The centralized model

Strength: control Individualistic (driving force = project leader) Requires a server Requires permanent connection to the server Snapshotting & publishing tightly bound

Associated social model: benevolent dictatorship

Subversion: "subvert the beast" Since 2000: overcome CVS limits while keeping compatibility Today: probably the most popular for the centralized model Reason: smooth transition from CVS Overview An extremely flexible tool Example: the management of ABINIT The end

The centralized model

Strength: control Individualistic (driving force = project leader) Requires a server Requires permanent connection to the server Snapshotting & publishing tightly bound

Associated social model: benevolent dictatorship

Subversion: "subvert the beast" Since 2000: overcome CVS limits while keeping compatibility Today: probably the most popular for the centralized model Reason: smooth transition from CVS Overview An extremely flexible tool Example: the management of ABINIT The end

The distributed model

Strength: freedom & autonomy Team-oriented (driving force = community) Exploration of new concepts made easy (no loss of history) Network access: only to publish or access remote changes

Associated social model: doocracy the actual developers take the decisions dynamical reorganization, delegation of powers mostly bottom-up structure

Bazaar: "VCS for Human Beings" "Just a tool" philosophy + bindings to other VCS’s Overview An extremely flexible tool Example: the management of ABINIT The end

The distributed model

Strength: freedom & autonomy Team-oriented (driving force = community) Exploration of new concepts made easy (no loss of history) Network access: only to publish or access remote changes

Associated social model: doocracy the actual developers take the decisions dynamical reorganization, delegation of powers mostly bottom-up structure

Bazaar: "VCS for Human Beings" "Just a tool" philosophy + bindings to other VCS’s Overview An extremely flexible tool Example: the management of ABINIT The end

The distributed model

Strength: freedom & autonomy Team-oriented (driving force = community) Exploration of new concepts made easy (no loss of history) Network access: only to publish or access remote changes

Associated social model: doocracy the actual developers take the decisions dynamical reorganization, delegation of powers mostly bottom-up structure

Bazaar: "VCS for Human Beings" "Just a tool" philosophy + bindings to other VCS’s Overview An extremely flexible tool Example: the management of ABINIT The end

Centralized vs. distributed: a false debate

Former bone of contention

Patch bomb = unmanageable contribution Distributed model: no protection Centralized model: just more difficult

Patch bomb = social failure =⇒ no technical solution Importance of fluid communication Interplay between social & technical aspects Centralized model popular for historical reasons Balance between control & freedom: YOU choose! Reminder: CVS = beast of SVN −→ SVN = beast of other tools Overview An extremely flexible tool Example: the management of ABINIT The end

Centralized vs. distributed: a false debate

Former bone of contention

Patch bomb = unmanageable contribution Distributed model: no protection Centralized model: just more difficult

Patch bomb = social failure =⇒ no technical solution Importance of fluid communication Interplay between social & technical aspects Centralized model popular for historical reasons Balance between control & freedom: YOU choose! Reminder: CVS = beast of SVN −→ SVN = beast of other tools Overview An extremely flexible tool Example: the management of ABINIT The end

In conclusion ...

Do not feed the troll! Overview An extremely flexible tool Example: the management of ABINIT The end

Outline

1 Overview An evolutionary process Quick tour of Bazaar 2.1

2 An extremely flexible tool Keeping up with an evolving project Popular Bazaar workflows

3 Example: the management of ABINIT Sustaining the growth of the code The ABINIT Forge Overview An extremely flexible tool Example: the management of ABINIT The end

Main objectives of Bazaar

Usability: "DVCS for Human Beings" (Ubuntu philosophy) Portability: only requires Python ≥ 2.4 Efficiency: smart support for renaming files & directories optimal use of disk space minimal overhead (fast branching & merging) Productivity: "just a tool" (read the documentation) Extensibility: Python plugins & well-documented API Pluggability: suitable for embedded systems Safety: strong & active open-source community test suite with > 10,000 automatic tests Freedom: Bazaar is Free (GPLv2+) Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar core concepts

Revision: snapshot of the state of a file tree Branch: ordered series of revisions Repository: store of revisions (branches sharing history) Working Tree: version-controlled directory holding source Checkout: source tree remotely connected to a branch Standalone Tree: independent branch with working tree Branching: action of splitting development lines Merging: action of joining development lines Conflict: two branches contain different changes at the same place Criss-Cross: painfully intricate branches

For more information http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ http://doc.bazaar-vcs.org/bzr.dev/en/user-reference/bzr_man.html Overview An extremely flexible tool Example: the management of ABINIT The end

The Bazaar working tree

Directory structure my_project/ +-.bzr/ +-README +-branch/ +-branch-format +-branch-lock/ +-checkout/ +-repository/ +-.bzrignore +-file1 +-file2 +-file3 +-... Overview An extremely flexible tool Example: the management of ABINIT The end

Bazaar main commands

bzr help: get generic help bzr help commands: get help on commands bzr [command] --help: get help on [command] bzr init: create a standalone tree bzr status: display current status of a branch bzr add: tell Bazaar to version-control files & dirs bzr remove: tell Bazaar to stop version-controlling files bzr : take a snapshot of the working tree bzr push: publish history to a remote branch bzr pull: import history from a remote branch bzr info: display branch information Overview An extremely flexible tool Example: the management of ABINIT The end

Committing changes

Writing changelogs One short summary line (no trailing dot)

* dir1/sub1/file1: Some changes. Make full sentences.

* dir2/sub2/file2,dir3/sub3/file3: Some other changes. * dir4/sub4/file4: Related changes (no blank line before).

* Additional notes and issues.

Recommended: GNU changelog format All lines < 80 characters and start at first column Reference document: http://www.gnu.org/prep/standards/html_node/Change-Logs.html Overview An extremely flexible tool Example: the management of ABINIT The end

Merging branches

When joining development lines: conflicts may happen Solving conflicts: graphical tools might help, e.g.: kdiff3 xxdiff

bzr : merge a branch into another −→ criss-cross =⇒ bzr merge --weave bzr conflicts: display remaining conflicts bzr resolved: mark a conflict as resolved bzr revert: rollback files/everything to the last snapshot Overview An extremely flexible tool Example: the management of ABINIT The end

Merging branches

When joining development lines: conflicts may happen Solving conflicts: graphical tools might help, e.g.: kdiff3 xxdiff

bzr merge: merge a branch into another −→ criss-cross =⇒ bzr merge --weave bzr conflicts: display remaining conflicts bzr resolved: mark a conflict as resolved bzr revert: rollback files/everything to the last snapshot Overview An extremely flexible tool Example: the management of ABINIT The end

Good practice

Committing safely ALWAYS issue a bzr status before committing

Merging safely

1 Commit first 2 Merge the other branch 3 Solve the conflicts 4 Commit again 5 Continue developing ... Overview An extremely flexible tool Example: the management of ABINIT The end

Good practice

Committing safely ALWAYS issue a bzr status before committing

Merging safely

1 Commit first 2 Merge the other branch 3 Solve the conflicts 4 Commit again 5 Continue developing ... Overview An extremely flexible tool Example: the management of ABINIT The end

User interfaces

GUI: Bazaar Explorer Web: Loggerhead Overview An extremely flexible tool Example: the management of ABINIT The end

Outline

1 Overview An evolutionary process Quick tour of Bazaar 2.1

2 An extremely flexible tool Keeping up with an evolving project Popular Bazaar workflows

3 Example: the management of ABINIT Sustaining the growth of the code The ABINIT Forge Overview An extremely flexible tool Example: the management of ABINIT The end

There is no "one true way"

Definition Workflow: way a team chooses to work together

In a project: workflow changes may become necessary With Bazaar: the tool adapts to your needs Purpose: let you focus on what truly matters

Following workflow descriptions Extracted from the Bazaar User Guide http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ Overview An extremely flexible tool Example: the management of ABINIT The end

There is no "one true way"

Definition Workflow: way a team chooses to work together

In a project: workflow changes may become necessary With Bazaar: the tool adapts to your needs Purpose: let you focus on what truly matters

Following workflow descriptions Extracted from the Bazaar User Guide http://doc.bazaar-vcs.org/bzr.dev/en/user-guide/ Overview An extremely flexible tool Example: the management of ABINIT The end

Outline

1 Overview An evolutionary process Quick tour of Bazaar 2.1

2 An extremely flexible tool Keeping up with an evolving project Popular Bazaar workflows

3 Example: the management of ABINIT Sustaining the growth of the code The ABINIT Forge Overview An extremely flexible tool Example: the management of ABINIT The end

Solo / single

Best practice for programming / writing: backup of old versions rollback to an earlier state tracking of history fast and lightweight

Papers, posters, talks, reviews, ... Overview An extremely flexible tool Example: the management of ABINIT The end

Partners / peer-to-peer

Advantages over solo: easier sharing of data line-wise tracking of changes (who did what) no server required intelligent merging Overview An extremely flexible tool Example: the management of ABINIT The end

Lock-step / centralized

Advantages over centralized VCS’s: better branching and merging simpler renaming support (files & directories) ability to change workflow whenever it makes sense Overview An extremely flexible tool Example: the management of ABINIT The end

Centralized with local commits

Advantages over centralized: can work offline (e.g. during travel) less interference of bad commits Overview An extremely flexible tool Example: the management of ABINIT The end

Distributed with shared mainline

Advantages over centralized with local commits: easier organization of work cross-merging possible shared repositories and integrated merging Overview An extremely flexible tool Example: the management of ABINIT The end

Distributed with human gatekeeper

Advantages over distributed with shared mainline: systematic review of the code tighter control over when changes go to mainline Overview An extremely flexible tool Example: the management of ABINIT The end

Distributed with automatic gatekeeper

Advantages over distributed with human gatekeeper: systematic testing of the code (higher mainline integrity) better scaling with team growth dedicated tool: Patch Queue Manager (PQM) Overview An extremely flexible tool Example: the management of ABINIT The end

Outline

1 Overview An evolutionary process Quick tour of Bazaar 2.1

2 An extremely flexible tool Keeping up with an evolving project Popular Bazaar workflows

3 Example: the management of ABINIT Sustaining the growth of the code The ABINIT Forge Overview An extremely flexible tool Example: the management of ABINIT The end

The mutation of ABINIT

Challenges Growing size of the code Growing complexity of the code Growing number of contributors Growing size of the community

ABINIT developers: all around the world + heterogeneous Until 2004 source code managed by CVS workflow: mostly solo 2004 −→ 2008 transition: CVS −→ GNU Arch −→ Bazaar exploration of workflows Overview An extremely flexible tool Example: the management of ABINIT The end

Breaking free from the client-server model

GNU Arch (2001) Originally: set of specifications to manage project history −→ generic protocol −→ overcome the drawbacks of centralized versioning −→ freedom regarding implementations

Specifically designed for distributed development Work while disconnected from the network Branching and mirroring do not require cooperation Uses available infrastructure: no dedicated server support for multiple network protocols permissions managed by the underlying system Implementations in / C++ / Python Overview An extremely flexible tool Example: the management of ABINIT The end

Breaking free from the client-server model

GNU Arch (2001) Originally: set of specifications to manage project history −→ generic protocol −→ overcome the drawbacks of centralized versioning −→ freedom regarding implementations

Specifically designed for distributed development Work while disconnected from the network Branching and mirroring do not require cooperation Uses available infrastructure: no dedicated server support for multiple network protocols permissions managed by the underlying system Implementations in C / C++ / Python Overview An extremely flexible tool Example: the management of ABINIT The end

From GNU Arch to Bazaar

TLA (Tom Lord’s Arch) [2001–2005] home page: http://wiki.gnuarch.org/FrontPage several forks: ArX, arch++, baz part of the GNU Project in 2003 basic maintenance since 2006

Baz (fork of TLA) [2004–2005] project initiated by Ltd. (Ubuntu) simpler UI, new archive format, better algorithms many issues: usability, lack of flexibility, bad scaling

Bazaar "New Generation" (bzr) [since 2005] home page: http://bazaar-vcs.org/ not based on GNU Arch anymore, still using some concepts completely rewritten from scratch in Python 2.4 key component of Ubuntu and Launchpad Overview An extremely flexible tool Example: the management of ABINIT The end

From GNU Arch to Bazaar

TLA (Tom Lord’s Arch) [2001–2005] home page: http://wiki.gnuarch.org/FrontPage several forks: ArX, arch++, baz part of the GNU Project in 2003 basic maintenance since 2006

Baz (fork of TLA) [2004–2005] project initiated by Canonical Ltd. (Ubuntu) simpler UI, new archive format, better algorithms many issues: usability, lack of flexibility, bad scaling

Bazaar "New Generation" (bzr) [since 2005] home page: http://bazaar-vcs.org/ not based on GNU Arch anymore, still using some concepts completely rewritten from scratch in Python 2.4 key component of Ubuntu and Launchpad Overview An extremely flexible tool Example: the management of ABINIT The end

From GNU Arch to Bazaar

TLA (Tom Lord’s Arch) [2001–2005] home page: http://wiki.gnuarch.org/FrontPage several forks: ArX, arch++, baz part of the GNU Project in 2003 basic maintenance since 2006

Baz (fork of TLA) [2004–2005] project initiated by Canonical Ltd. (Ubuntu) simpler UI, new archive format, better algorithms many issues: usability, lack of flexibility, bad scaling

Bazaar "New Generation" (bzr) [since 2005] home page: http://bazaar-vcs.org/ not based on GNU Arch anymore, still using some concepts completely rewritten from scratch in Python 2.4 key component of Ubuntu and Launchpad Overview An extremely flexible tool Example: the management of ABINIT The end

Outline

1 Overview An evolutionary process Quick tour of Bazaar 2.1

2 An extremely flexible tool Keeping up with an evolving project Popular Bazaar workflows

3 Example: the management of ABINIT Sustaining the growth of the code The ABINIT Forge Overview An extremely flexible tool Example: the management of ABINIT The end

Components of the Forge

File server available through SSH backup facility merging made easy Repositories one per developer / team containing all necessary branches strict naming conventions for public branches Maintenance utilities creation of repositories & branches information about archive status management of permissions (Unix) Test farm / nightly builds checking branch status: buildability & mergeability monitoring critical files building branches on various architectures −→ various hardware / OS / compiler combinations reporting nicely & daily online Overview An extremely flexible tool Example: the management of ABINIT The end

Components of the Forge

File server available through SSH backup facility merging made easy Repositories one per developer / team containing all necessary branches strict naming conventions for public branches Maintenance utilities creation of repositories & branches information about archive status management of permissions (Unix) Test farm / nightly builds checking branch status: buildability & mergeability monitoring critical files building branches on various architectures −→ various hardware / OS / compiler combinations reporting nicely & daily online Overview An extremely flexible tool Example: the management of ABINIT The end

Components of the Forge

File server available through SSH backup facility merging made easy Repositories one per developer / team containing all necessary branches strict naming conventions for public branches Maintenance utilities creation of repositories & branches information about archive status management of permissions (Unix) Test farm / nightly builds checking branch status: buildability & mergeability monitoring critical files building branches on various architectures −→ various hardware / OS / compiler combinations reporting nicely & daily online Overview An extremely flexible tool Example: the management of ABINIT The end

Components of the Forge

File server available through SSH backup facility merging made easy Repositories one per developer / team containing all necessary branches strict naming conventions for public branches Maintenance utilities creation of repositories & branches information about archive status management of permissions (Unix) Test farm / nightly builds checking branch status: buildability & mergeability monitoring critical files building branches on various architectures −→ various hardware / OS / compiler combinations reporting nicely & daily online Overview An extremely flexible tool Example: the management of ABINIT The end

Different scales, different workflows

Top level: distributed with human gatekeeper Geographical teams: peer-to-peer, lock-step, local commits Topical teams: peer-to-peer, distributed + shared mainline Maintainers: solo, using shared repositories

Example of shared repository ABINIT/ +-6.3/ # <--- Repository +-6.3.0-pouillon/ +-6.3.0-/ +-6.3.0-gmatteo-public/ Overview An extremely flexible tool Example: the management of ABINIT The end

Benefits to ABINIT from Bazaar

Central archive for data storage & sharing Reduced overhead for merges Easy propagation of partial merges All developer teams may work as they prefer Only initial support required (autonomy comes fast) Services: test farm, branch browser, web reporting

Good practice A technical tool never fulfills social duties To ensure sustainability: define & enforce clear rules for developers define & enforce clear policies for the branches make sure information flows Overview An extremely flexible tool Example: the management of ABINIT The end

Acknowledgments

Funding by MICINN & ETORTEK ABINIT Developers Bazaar Developers Wikimedia Commons & Wikipedia art..org Overview An extremely flexible tool Example: the management of ABINIT The end

Always remember ...

Golden rule of versioning Commit early, commit often!

Thank you! Overview An extremely flexible tool Example: the management of ABINIT The end

Always remember ...

Golden rule of versioning Commit early, commit often!

Thank you!