gnu-arch-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnu-arch-users] Fai update: Native merge, submit trees and more


From: Aaron Bentley
Subject: [Gnu-arch-users] Fai update: Native merge, submit trees and more
Date: Mon, 20 Sep 2004 19:30:05 -0400
User-agent: Mozilla Thunderbird 0.5 (X11/20040306)

Here's the latest on Fai development
(to install get started with Fai, see "http://www.sourcecontrol.net/~abentley/fai/";)

Current dist revision:
address@hidden/fai--dist--0.2--patch-78

Current devel revision:
address@hidden/fai--devel--0--patch-205

I'm happy with Fai's current state-- it's very usable for what I do. There are still some niggly things; I want a native replay command, for example; I want to specify patchlevels for single-revision mode, and I want to specify "--micro" or "--non-dependencies --reverse" for multiple -revision mode.

I'd like hear from anyone who's using it, and especially anyone who's tried it and chosen not to use it, what you think of it.

Various minor tweaks and bugfixes aren't mentioned, but there's a fine changelog to read.
http://www.sourcecontrol.net/~abentley/fai/changelog.php

Looking at new names
====================
Fai needs a new name, since "fai" is already "Fully Automated Installation", which is provided by at least Debian. I'm considering "afa" for "Accessible Front-end for Arch".

Changeset Munger
================
Broke the ChangesetMunger into a changeset representation and a set of munging options.

Documentation Fixups
====================
Some tweakage from David Allouche

Revert
======
Revert gained the ability to revert only logs or all control files, and to revert files based on pattern matches. ("revert --logs", "revert --control-files", "revert --pattern-files")

Revisions
=========
Added --micro: revisions in the partner version with a "Microbranch:" header for this revision.
Added --skip-present
Added --present: missing revisions that have patchlogs in the tree

Changes
=======
Changes now allows users to specify the diff options for viewing diffs.
("changes --diffopts -c").  Standard diff output is native, too.
The generated changesets are unaffected.

Commit and elog
===============
Better handling of situations where the user doesn't provide a suitable log

Terminal codes
==============
David Allouche: detection of whether to use terminal control codes for colour and title bars

Alias
=====
The alias command went native, and now allows you to list all aliases, list one alias, set an alias or delete an alias. Per-tree aliases are supported.

Submit Trees
============
Fai now supports submit trees, which means the following:
If you have a {arch}/+submit-version file, Fai uses its contents as the tree's "submit version". Every time you merge from the tree's submit version, Fai will perform "revert", "changes" and "commit" relative to the newest submit revision. Once you have committed, their behaviour returns to normal. I use this functionality for preparing tla merge requests against James' latest revision.

This functionality requires commit --base, which I expect to submit soon.

Native merge
============
Fai takes more control than ever over merging, with its own ancestor-picker. This algorithm is heavily based on the star-merge ancestor-picker, but has a few nice tweaks:
- it follows ancestry across continuations
- it halts when it encounters parallel merges, instead of doing the wrong thing.

Since it follows continuations, the native merge never needs a --reference. This, in turn, simplifies the algorithm. It also handles mixed versions properly.

The Canonical crew and I independently discovered that star-merge can't handle parallel merges. (See the "Star-merge Fatally Wounded" thread.) Fai's merge also requires an unambiguous last-merge, so it suffers from the same weakness. But unlike star-merge, it can detect situations in which there is no unambiguous last merge, and exit with an error explaining the situation.

You may be wondering why I didn't simply fix star-merge; there are a few reasons:

1. Tom is very conservative about star-merge. Hopefully, the Fai implementation can serve to show that the ideas are sound, and eventually lead to improving star-merge

2. It was easy.  The ancestor picker is less than 40 lines of code.

3. It allows Fai to support graphical merging.

Graphical three-way merging has been described by Linus Torvalds as a must-have feature for any RCS hoping to replace BitKeeper. While Fai can perform the merge using the apply-delta strategy, it can also simply return the name of the selected revision. Fai's get command can retrieve the desired trees. Fai's revert --renames command can rename all files to match their names in the working tree's revision. You can then invoke any three-way merge tool you like, and remove the extra trees afterward.

It should be easy to add Arch support to Meld, since Meld is also Python-based.

Aaron




reply via email to

[Prev in Thread] Current Thread [Next in Thread]