monotone-devel
[Top][All Lists]
Advanced

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

Re: [Monotone-devel] Workflow with Monotone


From: Richard Levitte - VMS Whacker
Subject: Re: [Monotone-devel] Workflow with Monotone
Date: Sun, 05 Jun 2005 19:23:46 +0200 (CEST)

In message <address@hidden> on 04 Jun 2005 22:08:56 +0200, Willem Rein 
Oudshoorn <address@hidden> said:

woudshoo> Now we plan using certificates heavily, for example:
woudshoo> 
woudshoo> Version:  1.2.0.3
woudshoo> Build:    machine xxx: passed|failed
woudshoo> Build arguments:  special compiler flags used
woudshoo> Smoketest: ... passed| failed
woudshoo> Regressiontest: ... passed | failed
woudshoo> Bug fix implemented: bug nr
woudshoo> Devepment environment:  rev id of development environment used
woudshoo> 
woudshoo> and a few others.

Wow, interesting!  Especially to have a specific version cert (I've
used tags so far for that kind of thing, but considering you can
select on specific cername=certvalue tuples these days, that's not
really necessary any longer :-)).

woudshoo> Wishlist
woudshoo> --------
woudshoo> 
woudshoo> [A] commit a revision without making changes

Hmm, considering what you say further down, you mean "without changes
to the files", right?  Actually, there's been some discussions on
versioned certs lately.  I don't really know what that resulted in,
though, as I haven't followed the discussion very well...

woudshoo> [B] mark a head as a non-head for a branch

I'll go into that below.

woudshoo> Use case I - Discard work
woudshoo> .........................
woudshoo> 
woudshoo> I have developed on my own branch project.wim
woudshoo> But I have been out of the loop for a while, so I want to
woudshoo> start again.
woudshoo>           project        project.wim
woudshoo> 
woudshoo>            A  
woudshoo>             \_______________  B (empty commit)
woudshoo>                               | did work
woudshoo>                               C
woudshoo>           .
woudshoo>           .
woudshoo>           .
woudshoo>           X
woudshoo>             \______________  Y  
woudshoo> 
woudshoo> 
woudshoo> Y will be in the same branch, but I do not want C to show
woudshoo> up.  So I would like to mark "C" as a non-head on the branch
woudshoo> project.wim

An option is to have project.wim.1, project.wim.2 and so on, or
something similar.  With some discipline, you can propagate between
those sub-branches and may be able to combine things nicely.

woudshoo> Use case II - Discard work
woudshoo> ..........................
woudshoo> 
woudshoo> A made a change I which is a mistake
woudshoo> 
woudshoo>            A
woudshoo>            |
woudshoo>            B
woudshoo> 
woudshoo> B is a mistake, so I want to do:
woudshoo> 
woudshoo>           A          
woudshoo>           | \
woudshoo>          *B* C (empty commit)
woudshoo> 
woudshoo> and continue to work on C.  Just mark
woudshoo> B as a non-head and I am happy.
woudshoo> If I later decide to continue on B, I just
woudshoo> have to explicitly checkout revision B
woudshoo> and commit again to create
woudshoo> 
woudshoo>           A
woudshoo>           | \
woudshoo>          *B*  C
woudshoo>           |
woudshoo>           X (empty commit)

An option is to use disapprove on B.  This creates a new revision
(direkt child of B) containing the "anti-patch" of B, and you can
continue from there:

  A
  |
  B
  |
  Bd
  |
  C

And if you decide that B is worth picking up again, you can update to
it and commit changes starting from it:

  A
  |
  B
  | \
  Bd  X
  |
  C

woudshoo> Use case II - Retroactive branching
woudshoo> ...................................
woudshoo> I started making changes and commited them
woudshoo> in branch project.wim, but I suddenly decide that
woudshoo> they should NOT be in project.wim but in 
woudshoo> project.wim.experiment
woudshoo> 
woudshoo> So I have
woudshoo> 
woudshoo>          A [project.wim]
woudshoo>          |
woudshoo>          B [project.wim]
woudshoo> 
woudshoo> 
woudshoo> And I want B to be in project.wim.experiment.  What I
woudshoo> do is:
woudshoo> (1) add branch certifacet project.wim.experiment to B
woudshoo> (2) mark B as a non head for project.wim
woudshoo> 
woudshoo> 
woudshoo> 
woudshoo>         A [project.wim]
woudshoo>         |
woudshoo>         B [*project.wim*]
woudshoo>           [project.wim.experiment]

There's no need to make B a non-head of project.wim.  Actually, that
would mean that project.wim ends up having no heads, or that A is
considered it's head.  And really, none of that is needed, just check
out or update to the experimental branch, and whatever you commit
thereafter will go to that branch, with no regard to what happens in
project.wim.

woudshoo> Use case III - adding other metadata
woudshoo> ....................................
woudshoo> If we want to make a new build with a different version
woudshoo> number, it would be nice to just do an empty commit
woudshoo> and attach the new compiler flags and version number
woudshoo> to the new revision.

Again, there's talk of versioned certs, and that would solve your
problem.  With the current monotone, you can rely on the multi-
value properties of certificates (you can have several certs with the
same name and different values) for the version number, and have the
other cert names include the version they apply to.  Like this:

Version:  1.2.0.3
Version:  1.2.0.4
Build 1.2.0.3: machine xxx: passed|failed
Build 1.2.0.4: machine xxx: passed|failed
Build arguments 1.2.0.3:  special compiler flags used
Build arguments 1.2.0.4:  special compiler flags used
Smoketest 1.2.0.3: ... passed| failed
Smoketest 1.2.0.4: ... passed| failed
Regressiontest 1.2.0.3: ... passed | failed
Regressiontest 1.2.0.4: ... passed | failed
Bug fix implemented 1.2.0.3: bug nr
Bug fix implemented 1.2.0.4: bug nr
Devepment environment 1.2.0.3:  rev id of development environment used
Devepment environment 1.2.0.4:  rev id of development environment used

I agree, that could become a lot of certs...

Cheers,
Richard

-----
Please consider sponsoring my work on free software.
See http://www.free.lp.se/sponsoring.html for details.

-- 
Richard Levitte                         address@hidden
                                        http://richard.levitte.org/

"When I became a man I put away childish things, including
 the fear of childishness and the desire to be very grown up."
                                                -- C.S. Lewis




reply via email to

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