Re: Preventing "Dirty" Checkins

2004-10-01 Thread Pierre Asselin
Robin Rosenberg <[EMAIL PROTECTED]@dewire.kom> wrote:
> Pierre Asselin wrote:
> > Hm, my language was ambiguous.  What the loginfo would trigger is
> > one script, running on the test machine, that updates the test sandbox,
> > builds, runs the tests, and finally moves the tag if the tests pass.

> Trigging rebuilds for every commit is insane. 

Well, the OP wanted to trigger a test build in the pre-commit check.
I was proposing a less heavy-handed solution.  Not that it's entirely
free of "gatchas".

> [ sane process elided ]


-- 
pa at panix dot com
___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Re: Preventing "Dirty" Checkins

2004-10-01 Thread Robin Rosenberg
Pierre Asselin wrote:
> Hm, my language was ambiguous.  What the loginfo would trigger is
> one script, running on the test machine, that updates the test sandbox,
> builds, runs the tests, and finally moves the tag if the tests pass.

Trigging rebuilds for every commit is insane. 

I run a job for one project every 15 minutes that checks if there are any
checkins since the previous build using cvs histor and also checks that non
checkins happened during the last ten minutes. The ten minute check is
there to lessen the risk that a build starts in the middle of a check-in,
giving false negative status reports).

Then the build process starts, tagging everything in the project with a
unique tag, exporting from CVS using that tag and then it building the
project. The compilation errors and a summary are sent via e-mail to all
interested parties and an internal web is updates with a pass/fail flags
and a link to the build directory for reference and retrieval of the
results.

It does waste disk space, but that's cheap. It is also easy to prune old
directories.

-- robin

___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Re: Preventing "Dirty" Checkins

2004-09-30 Thread Pierre Asselin
Maarten de Boer <[EMAIL PROTECTED]> wrote:
> > What you *could* do is trigger the build from loginfo (post-commit)
> > and update a moving tag if the build is successful.
> > [ ... ]

> But why would you to that from the loginfo? Wouldn't it be easier to
> have that tag moved by a virtual user, the dedicated test build machine,
> which is building and testing in a loop, everytime the compilation is
> correct?

Hm, my language was ambiguous.  What the loginfo would trigger is
one script, running on the test machine, that updates the test sandbox,
builds, runs the tests, and finally moves the tag if the tests pass.

-- 
pa at panix dot com
___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Re: Using moving tags (Was: Preventing "dirty" checkins)

2004-09-29 Thread Greg A. Woods
[ On Wednesday, September 29, 2004 at 08:33:40 (-0700), Yamuna Ramasubramaniyan wrote: 
]
> Subject: Using moving tags (Was: Preventing "dirty" checkins)
>
> I have a question about using moving tags.  You tag
> the repository with LAST_GOOD today.  Someone removes
> a file.  This file still contains the LAST_GOOD tag. 
> The next person checking out the module with the
> LAST_GOOD tag will get this deleted file.  Do you use
> a commitinfo trigger to remove the moving tag from the
> deleted file?  Are there any other ways to handle this
> case?

Create a new "feature" (or "fix") branch for every change (and clean up
old feature/fix branches once they're also integrated onto a release
branch).  Merge the feature/fix branches to the trunk for integration
into the main line of active development (and then optionally cut
release branches onto which fix branches can optionally be merged to as
well).  You can even make a rule that only supervisors are allowed to
commit to the trunk and/or to release branches and thus only supervisors
will be allowed to approve changes to the baseline or to a patch
release.  Supervisors can further be required to do compiles and run
regression tests before committing the integrated changes.

However this is all extremely complicated to manage, especially without
the help of some front-end/wrapper tools.

CVS really is not the right tool for this style of development.

-- 
Greg A. Woods

+1 416 218-0098  VE3TCPRoboHack <[EMAIL PROTECTED]>
Planix, Inc. <[EMAIL PROTECTED]>  Secrets of the Weird <[EMAIL PROTECTED]>


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Re: Preventing "Dirty" Checkins

2004-09-29 Thread Greg A. Woods
[ On , September 28, 2004 at 12:06:18 (-0700), Ones Self wrote: ]
> Subject: Preventing "Dirty" Checkins
>
> I'm running a CVS server which compiles and tests the current
> files in CVS every hour.  I would like to make new checkins
> available _only_ if they compile and pass the tests.

You don't want to use CVS then.

You need and want to use a tool called Aegis, or else something very
much like it.

I.e. you need to use a version tracking system that inherently supports
the concept of a two-phase commit.

Aegis acutally does the regression tests on every commit (or at least it
does this by default), as well as (optionally) implementing a manual
second "approval" commit (so in a sense Aegis is a three-phase system).

Furthermore new changes cannot be committed unless a new test is also
provided to make sure the changes are not broken ever again (unless they
are explicitly undone).

-- 
Greg A. Woods

+1 416 218-0098  VE3TCPRoboHack <[EMAIL PROTECTED]>
Planix, Inc. <[EMAIL PROTECTED]>  Secrets of the Weird <[EMAIL PROTECTED]>


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


RE: Preventing "Dirty" Checkins

2004-09-29 Thread Paul Sander
>--- Forwarded mail from [EMAIL PROTECTED]

>Maarten de Boer wrote:

>> > One catch I can see with this approach is the platform. For 
>> example, our
>> > development platform is Windows using Microsoft Visual 
>> Studio, and our
>> > repository is on a Solaris machine.
>> 
>> So, the testing machine could be Windows with Visual, which 
>> could compile,
>> test, and move the "compiles-correctly" tag.
>But that's a different approach from what was suggested. The suggested
>approach was a commitinfo script. Commitinfo runs *only* on the server.

>I'm not saying the suggested approach was the best, or even workable. I'm
>just pointing out a potential problem with the suggestion.

Another is what to do if your shop compiles on more than one platform.
How do you test that the compile is successful everywhere?

About the third time you do this, you start thinking that scheduled
builds combined with good change control and a promotion system look
pretty good.

>--- End of forwarded message from [EMAIL PROTECTED]



___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Using moving tags (Was: Preventing "dirty" checkins)

2004-09-29 Thread Yamuna Ramasubramaniyan
I have a question about using moving tags.  You tag
the repository with LAST_GOOD today.  Someone removes
a file.  This file still contains the LAST_GOOD tag. 
The next person checking out the module with the
LAST_GOOD tag will get this deleted file.  Do you use
a commitinfo trigger to remove the moving tag from the
deleted file?  Are there any other ways to handle this
case?

-Cheers,
Yamuna


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Re: Preventing "Dirty" Checkins

2004-09-29 Thread Maarten de Boer
> But that's a different approach from what was suggested. The suggested
> approach was a commitinfo script. Commitinfo runs *only* on the server.
> 
> I'm not saying the suggested approach was the best, or even workable. I'm
> just pointing out a potential problem with the suggestion.

Yes, yes, I know, I suggested the different approach (a dedicated test
machine) in a previous mail, and saw this as another argument in favor.
I should have been more clear.

Maarten



___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


RE: Preventing "Dirty" Checkins

2004-09-29 Thread Jim.Hyslop
Maarten de Boer wrote:

> > One catch I can see with this approach is the platform. For 
> example, our
> > development platform is Windows using Microsoft Visual 
> Studio, and our
> > repository is on a Solaris machine.
> 
> So, the testing machine could be Windows with Visual, which 
> could compile,
> test, and move the "compiles-correctly" tag.
But that's a different approach from what was suggested. The suggested
approach was a commitinfo script. Commitinfo runs *only* on the server.

I'm not saying the suggested approach was the best, or even workable. I'm
just pointing out a potential problem with the suggestion.

-- 
Jim Hyslop
Senior Software Designer
Leitch Technology International Inc. (http://www.leitch.com)
Columnist, C/C++ Users Journal (http://www.cuj.com/experts)


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Re: Preventing "Dirty" Checkins

2004-09-29 Thread Maarten de Boer
> One catch I can see with this approach is the platform. For example, our
> development platform is Windows using Microsoft Visual Studio, and our
> repository is on a Solaris machine.

So, the testing machine could be Windows with Visual, which could compile,
test, and move the "compiles-correctly" tag.

Maarten






___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


RE: Preventing "Dirty" Checkins

2004-09-29 Thread Jim.Hyslop
[EMAIL PROTECTED] wrote:
> Yet another method is to divorce the notion of "latest 
> checked in" from
> "eligible for build".  I personally would never discourage anyone from
> checking in their work,
I actively encourage frequent checkins. If you have something that will (or
might) break the build, then create a private, temporary branch and check it
in there. The important thing is that your work is safe in the repository;
I've had a few too many hard drive crashes to leave it to chance.

-- 
Jim Hyslop
Senior Software Designer
Leitch Technology International Inc. (http://www.leitch.com)
Columnist, C/C++ Users Journal (http://www.cuj.com/experts)



___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


RE: Preventing "Dirty" Checkins

2004-09-29 Thread Jim.Hyslop
[EMAIL PROTECTED] wrote:

> Simple question:  why can't the developers do a top-level "make test"
> before committing, and sidestep the question ?
Sometimes ya just forget to 'cvs add' a file ;=)

-- 
Jim Hyslop
Senior Software Designer
Leitch Technology International Inc. (http://www.leitch.com)
Columnist, C/C++ Users Journal (http://www.cuj.com/experts)



___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


RE: Preventing "Dirty" Checkins

2004-09-29 Thread Jim.Hyslop
Todd Denniston wrote:
> you probably want to look into commitinfo in the 
> Administrative files section
> of the manual
[...]

> make your command (or script) build the software and if it 
> fails return
> nonuser. Checkin's will take a long time if you force 'make 
> clean world',
In my case, "a long time" would be several hours ;=)

One catch I can see with this approach is the platform. For example, our
development platform is Windows using Microsoft Visual Studio, and our
repository is on a Solaris machine. Despite all my writing about portable
code (see URL in .sig) much of our code is extremely MSVC-centric.

> The better method would be to hire engineers who 
> understand the
> process of making good checkins, and/or use a process that 
> involves the
> engineer doing the check before committing and dock his/her 
> pay for bad
> commits<\opinion>
I agree - that is by far the better approach. In our shop, we rarely have
broken builds. We have an automated build that runs once a day, and emails
every member of the team the build results in summary form, with a link to
the full build log.

-- 
Jim Hyslop
Senior Software Designer
Leitch Technology International Inc. (http://www.leitch.com)
Columnist, C/C++ Users Journal (http://www.cuj.com/experts)


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Re: Preventing "Dirty" Checkins

2004-09-29 Thread Maarten de Boer
> What you *could* do is trigger the build from loginfo (post-commit)
> and update a moving tag if the build is successful.  That way
> your trunk can contain garbage, but the last successfully built
> commit will have an unambiguous marker on it.  Your users can
> choose the unstable tip,
> cvs checkout foo
> 
> or the last known good version,
> cvs checkout -rLAST_GOOD foo

But why would you to that from the loginfo? Wouldn't it be easier to
have that tag moved by a virtual user, the dedicated test build machine,
which is building and testing in a loop, everytime the compilation is
correct?

Maarten


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Re: Preventing "Dirty" Checkins

2004-09-28 Thread Paul Sander
>--- Forwarded mail from [EMAIL PROTECTED]

>Ones Self <[EMAIL PROTECTED]> wrote:

>> I'm running a CVS server which compiles and tests the current
>> files in CVS every hour.  I would like to make new checkins
>> available _only_ if they compile and pass the tests.

>> So, if a user checks in something which does not compile, for
>> example, other users who check out at that time will not get
>> the new version until the problem is fixed.  Everytime you
>> do an update, you know you're getting a clean version of the
>> source; one that compiles, and in which the tests pass.

>I don't think you can do that.  Well, you could trigger a full
>recompile from commitinfo and allow the commit only if the build
>succeeds, but your commits would be a bit sluggish that way.

>What you *could* do is trigger the build from loginfo (post-commit)
>and update a moving tag if the build is successful.  That way
>your trunk can contain garbage, but the last successfully built
>commit will have an unambiguous marker on it.  Your users can
>choose the unstable tip,
>cvs checkout foo

>or the last known good version,
>cvs checkout -rLAST_GOOD foo

>but in the latter case they won't be able to commit changes.
>(Well, they could start a branch, but that's taking us off-topic.)

>The loginfo trigger would be asynchronous, as in
>https://www.cvshome.org/docs/manual/cvs-1.11.17/cvs_18.html#SEC175
>and there would be negligible delay to a commit.

>Simple question:  why can't the developers do a top-level "make test"
>before committing, and sidestep the question ?  Or do the unit tests
>take that long to run ?  If the latter, you'll have to guard your
>build-test-retag script against multiple instances of itself.

Seems like the triggers and build procedures could conspire to enforce
a policy that developers complete successful builds, too.  The build
procedure could have a target that lists its products, one of which
be a summary report.  The trigger could audit the summary and make sure
that the targets are all newer than the sources and fail if anything was
done out of order.

>--- End of forwarded message from [EMAIL PROTECTED]



___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Re: Preventing "Dirty" Checkins

2004-09-28 Thread Paul Sander
>--- Forwarded mail from [EMAIL PROTECTED]

>Ones Self wrote:
>> 
>> Hi,
>> 
>> I'm running a CVS server which compiles and tests the current
>> files in CVS every hour.  I would like to make new checkins
>> available _only_ if they compile and pass the tests.
>> 
>> So, if a user checks in something which does not compile, for
>> example, other users who check out at that time will not get
>> the new version until the problem is fixed.  Everytime you
>> do an update, you know you're getting a clean version of the
>> source; one that compiles, and in which the tests pass.

>make your command (or script) build the software and if it fails return
>nonuser. Checkin's will take a long time if you force 'make clean world', but
>you can choose the implementation level that is right for you. This way only
>acceptable things make it in the base line.

>The better method would be to hire engineers who understand the
>process of making good checkins, and/or use a process that involves the
>engineer doing the check before committing and dock his/her pay for bad
>commits<\opinion>, but you may implement what ever mechanisms make you or your
>boss happy.

Yet another method is to divorce the notion of "latest checked in" from
"eligible for build".  I personally would never discourage anyone from
checking in their work, and I found that providing a handoff method in
which the user explicitly guarantees that the code will build is a useful
tool.  Collecting up the bits for inclusion (or exclusion) in the next
build is a simple form of change control that also improves the quality
of the builds overall because changes can be undone (sometimes
automatically!) under error conditions.

>--- End of forwarded message from [EMAIL PROTECTED]



___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Re: Preventing "Dirty" Checkins

2004-09-28 Thread Pierre Asselin
Ones Self <[EMAIL PROTECTED]> wrote:

> I'm running a CVS server which compiles and tests the current
> files in CVS every hour.  I would like to make new checkins
> available _only_ if they compile and pass the tests.

> So, if a user checks in something which does not compile, for
> example, other users who check out at that time will not get
> the new version until the problem is fixed.  Everytime you
> do an update, you know you're getting a clean version of the
> source; one that compiles, and in which the tests pass.

I don't think you can do that.  Well, you could trigger a full
recompile from commitinfo and allow the commit only if the build
succeeds, but your commits would be a bit sluggish that way.

What you *could* do is trigger the build from loginfo (post-commit)
and update a moving tag if the build is successful.  That way
your trunk can contain garbage, but the last successfully built
commit will have an unambiguous marker on it.  Your users can
choose the unstable tip,
cvs checkout foo

or the last known good version,
cvs checkout -rLAST_GOOD foo

but in the latter case they won't be able to commit changes.
(Well, they could start a branch, but that's taking us off-topic.)

The loginfo trigger would be asynchronous, as in
https://www.cvshome.org/docs/manual/cvs-1.11.17/cvs_18.html#SEC175
and there would be negligible delay to a commit.

Simple question:  why can't the developers do a top-level "make test"
before committing, and sidestep the question ?  Or do the unit tests
take that long to run ?  If the latter, you'll have to guard your
build-test-retag script against multiple instances of itself.

-- 
pa at panix dot com
___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Re: Preventing "Dirty" Checkins

2004-09-28 Thread Todd Denniston
Ones Self wrote:
> 
> Hi,
> 
> I'm running a CVS server which compiles and tests the current
> files in CVS every hour.  I would like to make new checkins
> available _only_ if they compile and pass the tests.
> 
> So, if a user checks in something which does not compile, for
> example, other users who check out at that time will not get
> the new version until the problem is fixed.  Everytime you
> do an update, you know you're getting a clean version of the
> source; one that compiles, and in which the tests pass.
> 
you probably want to look into commitinfo in the Administrative files section
of the manual

Administrative files
https://www.cvshome.org/docs/manual/cvs-1.11.17/cvs_18.html#SEC158

The commit support files 
https://www.cvshome.org/docs/manual/cvs-1.11.17/cvs_18.html#SEC167

commitinfo
https://www.cvshome.org/docs/manual/cvs-1.11.17/cvs_18.html#SEC169

instead of preventing checkouts, it prevents check in "If the command (or
script) returns a non-zero exit status the commit will be aborted."

make your command (or script) build the software and if it fails return
nonuser. Checkin's will take a long time if you force 'make clean world', but
you can choose the implementation level that is right for you. This way only
acceptable things make it in the base line.

The better method would be to hire engineers who understand the
process of making good checkins, and/or use a process that involves the
engineer doing the check before committing and dock his/her pay for bad
commits<\opinion>, but you may implement what ever mechanisms make you or your
boss happy.

-- 
Todd Denniston
Crane Division, Naval Surface Warfare Center (NSWC Crane) 
Harnessing the Power of Technology for the Warfighter


___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs


Preventing "Dirty" Checkins

2004-09-28 Thread Ones Self
Hi,

I'm running a CVS server which compiles and tests the current
files in CVS every hour.  I would like to make new checkins
available _only_ if they compile and pass the tests.

So, if a user checks in something which does not compile, for
example, other users who check out at that time will not get
the new version until the problem is fixed.  Everytime you
do an update, you know you're getting a clean version of the
source; one that compiles, and in which the tests pass.

Thanks
___
Info-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/info-cvs