|
|
OpenSolaris DSCM Evaluation: Bzr (Interim Report)
3.1 E0 - Open source bzr is open source, and available under the GPL, version 2. 3.2 E1 - Unbiased and disconnected distribution bzr can operate in a disconnected fashion. With the bzrtools extensions, bzr gains a push implementation; the core tool supports only pull by default. 3.3 E2 - Networked operation bzr supports a number of network transports. sftp can be used for push and pull. 3.4 E3 - Interface stability and completeness bzr has a plugin interface. Popular plugins have migrated into the core as their value is demonstrated. bzr has supported upgrade across storage version changes. The development site suggests that the current format is long-lived, but also is exploring alternate formats with greater efficiencies. 3.5 E4 - Standard operations and transactions History preserving rename is supported. Merge across rename is supported. Deletion of files is supported. 3.6 E5 - Per changeset metadata Generic handling of versioned metadata is still an architectural goal. bzr can support GPG-based signing of revisions in the tested version. 3.7 C6 - Ease of use bzr, because of its primarily Python-based implementation, is straightforward to install. For use of the sftp transport, the additional modules paramiko and pyCrypto are required; these modules are produced by members of the Python community separate from the bzr effort. bzr's CLI is consistent and generally easy to understand. The command has reasonably detailed internal help text. bzr with bzrtools has a number of advanced commands that may cause confusion; in particular, the merge/remerge/commit/uncommit/resolve/shelve subcommand complex encompasses a set of operational choices that could result in user vertigo during synchronization. 3.8 C7 "No dedicated server" operational mode bzr does not have a server program. 3.9 C8 - Tool community health The bzr community appears to have active core developers and contributors. 3.10 C9 - OpenSolaris community implementation expertise Specifically for bzr, none known; a number of community members have Python experience. Due to participation in other OSS communities, that number is increasing. 3.11 C10 - Interface extensibility The post_commit hook allows a Python function, presumably delivered in a plugin, to be executed on post_commit. (Because of the nature of push, which is serverless, notification operations like we use today appear to require the existence of a child repository to follow the integration repository and execute hooks.) A mail-on-commit operation is another possibility. 3.12 C11 - Transactional operations and corruption recovery bzr attempts to maintain transactional integrity. The 'check' subcommand is used to verify history consistency; I did not evaluate whether check would catch all possible forms of corruption. 3.13 C12 - Content generality Binary files are supported. An interesting aspect of bzr's implementation is that it uses Unicode internally, with repositories being stored in UTF-8. 3.14 O13 - Partial trees Partial trees are not supported 3.15 O14 - Per-file histories Per-file histories are not supported. The log subcommand can be used to examine the revisions affecting a specific file or files. |