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

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

[Gnu-arch-users] IDE not prism-commit? (was Re: Re-linking to revlib imp


From: Tom Lord
Subject: [Gnu-arch-users] IDE not prism-commit? (was Re: Re-linking to revlib implemented)
Date: Fri, 16 Jan 2004 09:41:20 -0800 (PST)


    > From: Aaron Bentley <address@hidden>
    [regarding the "prism-merge technique"]
    > >         1) what-changed -c ,changes in my multi-purpose tree
    > >         2) mv ,changes ../other-tree  ; cd ../other-tree
    > >         3) redo ,changes
    > >         4) fix any conflicts
    > >         5) commit
    > >         6) cd ../multi-purpose-tree ; commit
    > > It's step 4 that can't be automated away although in the common case
    > > it's a noop.

    > How about 
    > 1) what-changed -c ,changes in my multi-purpose tree
    > 2) mv ,changes ../other-tree  ; cd ../other-tree
    > 3) redo ,changes
    > 4) cp ../multi-purpose-tree/`tla make-log -d ../multi-purpose-tree` `tla
    > make-log`
    > 5) if [ -n "`find -name '*.rej'`" ]; then echo "Not committing to
    > branch"; else commit
    > 6) cd ../multi-purpose-tree ; commit

Well, that's the same thing.    BTW, the right way to notice conflicts
is on the exit status of `redo', not by looking of `.rej' files.

Oh, and, I left something out.  Step (6) should probably include a
sync-tree with the feature branch.

Most of the harder questions that have kept me from implementing this
in the past are "just" user interface issues.   A few are semantic
issues.

For example: 

* When using this technique I'm basically hacking on N-distinct
  similar trees.  How much of that is automated?  Is there a separate
  command to create the trees?  Is there a fixed convention for how
  they are named and where they are located or are their "pointers" in
  each tree to the others?

* Should the `prism-commit' command take steps to ensure that each tree
  is in the state it assumes its in before operating on it or trust
  the user and permit users to modify them freely?   (e.g., what if
  I have uncommitted local changes in a branch tree -- or have used
  set-tree-version to change the branch of a branch tree)

* If the patch application to the feature branch fails should the
  commit of the multi-purpose tree proceed or be aborted?  

* If the patch application to the feature branch fails should that
  feature branch tree be left in some special state to prevent
  subsequent patch applications and commits until the user declares
  the conflicts resolved?  

* If I make some changes on the multi-purpose tree, try to
  prism-commit command, and get conflicts on the branch -- assuming
  that my multi-purpose tree isn't committed in that case -- do we
  need a special undo command to restore both the multi-purpose tree
  and the branch tree?

* When I wind up editting two similar looking trees (multi-purpose and
  branch) I am likely to wind up with multiple editor buffers open on
  same-named files in the two trees.  In my experience, this is
  confusing and error prone -- I'd really like some very grossly
  apparent visual cue like black backgrounds in multi-purpose tree
  windows and distinct background colors for each branch tree.  I'd
  like to be able to navigate like "in another window, take me to this
  same line but in the branch tree".   What kind of support should
  arch provide to make this easy?

* The graphs I actually want may be even more complicated than what
  we've talked about.   So far we have:

                           <-- various 
        multi-purpose-tree <-- feature
                           <-- branches

  where the arrows indicate "merge-to <-- merge-from".   (And, yes, 
  I've drawn that right.   Even though I do the work on the
  multi-purpose tree, the patch logs make it look like I did the work
  on the feature branches and merged into the multi-purpose tree.)

  But what I will more typically want is:

                           <-- some      
                           <-- feature
                           <-- branches
        multi-purpose-tree ..........
                           <-- other     <
                           <-- feature   <----> integration branch
                           <-- branches  <

  where the double-headed arrow "A <--> B" means star-merging back
  and forth between A and B.  (And I can easilly wind up
  wanting more than one integration branch.)

  Do we want to further automate integration branches?


The point of spinning out the more complex scenarion (like integration
branches), mentioning the issues about keeping track of tree states
(like "this branch tree has unresolved conflicts") and mentioning
issues with ancillary software (like editor window background colors)
is to advance the hypothesis that perhaps the core of what's needed
here is not a perfect "prism-merge" command but, rather, a really good
branch-oriented IDE that helps me navigate and manage multiple similar
trees simultaneously, visualize merge histories, persistently keep
track of work agendas (like "trees B, C, and D have unresolved
conflicts"), and use a more scriptable and
passive-recognition-oriented interface for issuing tla commands.   

If I had an IDE with those features, I'm not so sure a separate
prism-commit command would be needed at all.

If I had a separate prism-commit command but no such IDE, I'm not sure
I've gained very much.

Another way to look at this is in terms of labor vs. tools.  Absent an
IDE or perfect prism-commit command, I can still do these patch flows.
I'm have to do them "by hand" and I'm much more likely split the work
up across multiple people.  To a certain extent, what we're talking
about is very similar (in some cases exactly the same) as patch flow
in the arch project --- except that in the arch project a given patch
will pass through two or three hands instead of just one.

My perception is that the main reason it takes two or three hands for
this kind of patch flow is just one of organizational complexity.  The
actual steps of prism-merging are easy --it's all the tree management
that's hard.  I could organize my own "internal" work that way (and
did for a month or two as an experiment) -- it pays off in some big
ways to do that.  But it's also very tedious to keep track of so many
trees and tree states.  A nice IDE -- a kind of "project tree
secretary-bot" -- could make that pay-off/complexity trade-off much
nicer.  A prism-commit command wouldn't address most of the
tree-management complexity issues.

(Another thing I learned from my experiment is that strict
prism-merging is great but insufficient.  Every now and again it
becomes necessary to improvise a little bit and use a different
technique.  This is another way in which just a `prism-commit' command
wouldn't help: it's really the tree-management stuff that's missing.)

-t





reply via email to

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