[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnu-arch-users] [BUG] FEATURE PLANS: submission branches
From: |
Tom Lord |
Subject: |
[Gnu-arch-users] [BUG] FEATURE PLANS: submission branches |
Date: |
Fri, 28 May 2004 17:17:49 -0700 (PDT) |
Given any two versions, MAINLINE and BRANCH, we can trivially
construct a third version (given `commit --base' --- see an earlier
"FEATURE PLAN" post).
The purpose of the new version we'll construct is to optimize access
to the deltas (a) from MAINLINE to BRANCH; and (b) from BRANCH to
BRANCH. We're particularly interested in optimizing those delta
computations for the cases where access to the MAINLINE archive is
fast, there is almost certainly a very heavily populated revision
library for MAINLINE, there is at most a very sparsely populated
revlib for BRANCH, and access to the BRANCH archive may be slow.
In other words, MAINLINE is a typical maintainer's tree; BRANCH a
typical contributors.
We're deriving a thrid branch that optimizes access to BRANCH for the
guy running MAINLINE. The aim is to spare the MAINLINE guy from
_having_ to mirror BRANCH or having a heavily populated revision
library for BRANCH.
Let's call the third branch SUBMITQ.
For every REV in BRANCH there is a corresponding REV in SUBMITQ.
They're defined this way:
LET
latest_mainline (REV) := "the latest revision of MAINLINE that
revision REV of BASE is up-to-date with"
THEN
* to create SUBMITQ--REV
% tla get BRANCH--REV wd
% tla set-tree-version --dir wd MAINLINE
% tla commit --base `tla latest-mainline --dir dir`
The commit must produce BRANCH--REV, of course.
And that's pretty much it.
Details:
% tla update-submitq MAINLINE BRANCH
Ensure the existence and up-to-dateness of a
submtiq branch for MAINLINE.
If the name of BRANCH is
proj--branch--x.y
then the name of the new submitq is:
proj--branch+submit_$(mangled MAINLINE)--x.y
where `mangled' is a bijective mapping between valid archive names
and valid branch names. The branch names in the range of `mangled'
may not include either of the characters "+" or ",").
The revision builder is effected this way:
Asked to build some BRANCH-REV, it asks the archive for a list
of branches in the same category. From this, it can identify
the set of mainlines for which a submitq from BRANCH exists.
Call that set of mainlines for which submitqs of branch are
available the SUBMITQS-OFFERED-FOR.
Call the set of versions found in greedy libraries, REFERENCES-USED.
The set SUBMITQ-CANDIDATES is (SUBMITQS-OFFERED-FOR intersect
REFERENCES-USED).
The revision SUBMITQ-IDEAL is the version of the project tree this
command was invoked in (or given a --dir argument for).
If SUBMITQ-IDEAL is a member of SUBMITQ-CANDIDATES
then SUBMITQ-WILL-USE := SUBMITQ-IDEAL
otherwise if SUBMITQ-CANDIDATES is not empty
then SUBMITQ-WILL-USE := randomly_choose (SUBMITQ-CANDIDATES)
otherwise
SUBMITQ-WILL-USE := <undefined>
endif
If SUBMITQ-WILL-USE != <undefined>
then
let C be the revision of SUBMITQ-WILL-USE that SUBMITQ--REV
is tagged from.
recursively ensure that C is in the revision library
create SUBMITQ--REV by patching C with the changeset in
SUBMITQ--REV.
tla remove-log the SUBMITQ version from the resulting tree
else
build using just the summary branch (if any) for BRANCH
and BRANCH itself
endif
-t
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnu-arch-users] [BUG] FEATURE PLANS: submission branches,
Tom Lord <=