At our company we are converting over to Mercurial from SVN and one of
the last things to get going is migrating CruiseControl.NET to the
mercurial plugin.  We've had good luck with the mercurial plugin and
it appears to be working fine - at least until I manually did an hg
update on the directory that cc.net had created.  After doing that it
got stuck in a continuous build loop.  What I did was

1 - a month ago let cc.net setup the working directory with this
configuration (there were multiple projects each with a different
named branch).
    <sourcecontrol type="hg">
      <executable>C:\Program Files\TortoiseHg\hg.exe</executable>
      <repo>http://code.company.com/hg/hgweb.cgi/ourapp/framework</
repo>
      <branch>10.2.3</branch>
      <multipleHeadsFail>false</multipleHeadsFail>
    </sourcecontrol>
2 - let cruisecontrol.net do its thing, building just fine for a month
only when a change was made on that named branch
3 - I added an hgrc to the .hg directory so I could push some of the
local changes the build made.
4 - I ran an "hg update"
5 - after doing that anytime cc.net checked to see if there were
modifications it would find there were.  I believe this is because the
method GetModificationsFlowGetLog in the Mercurial.cs file (http://
ccnet.svn.sourceforge.net/viewvc/ccnet/trunk/project/core/
sourcecontrol/Mercurial/Mercurial.cs?revision=7697&view=markup) does
not use the "-b" option to limit the log results to just this branch.

I believe that cc.net is issuing the command "hg log -r 10.2.3:488"

Where 488 is the tip of the repository, but it is a changeset on a
different named branch.  So the log is returning all of the changesets
that have occurred on all branches since the last changeset on the
working directory (10.2.3) branch.

If the command would be changed to "hg log -r 10.2.3:488 -b 10.2.3"
that would limit the changesets returned to be only changesets from
the branch the working directory is for.

Let me know if this makes sense.  Thanks!

Reply via email to