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

[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





reply via email to

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