Hi all,
I am pleased to announce initial support for AccuRev SCM in TeamCity.
This is an early alpha release to get feedback from the community.
The plug-in supports:
collecting changes made to a stream
checkout on server side
obtaining file content (allows diffs)
The plug-in currently does not support:
checkout on agent side
remote run form IDE
checkout rules
The plugin supports AccuRev v4.7.
More details can be found on the AccuRev plugin page.
Francois Retief
Thank you Francois!
Have been waiting a long time for AccuRev support in TeamCity so I'm very much looking forward to trying this.
Will let you know how I go.
Hey Francois,
My initial findings with using the plug-in:
Setup was pretty straightforward but I did have one issue on our Windows 2003 server, around authentication with AccuRev: it complained that the AccuRev session hadn't been authenticated yet despite the fact I had provided the appropriate username/password in the VCS root settings. I managed to get it to work by logging onto the server console and manually doing a "accurev login username password".
After that I had no trouble setting up a project and build configuration using the new AccuRev VCS root. After the initial population of the work area, it was extremely fast in retrieving changes when I promoted to the stream specified in the VCS root settings. Check-out rules and trigger patterns worked a treat which was very encouraging.
However when promoting to any parent streams of the specified stream it didn't pick up the changes. I presume this is by design, as usage of the HIST command against a stream will only ever return changes directly on that specific stream. Is that the intended behaviour? If so, had you any thoughts about practises within TeamCity to support the AccuRev stream inheritance model?
Wish list for the plug-in:
Ability to specify an optional "watch" Stream in addition to the Stream setting which the plug-in uses as a basis of the working area it populates. For example, say I wanted to watch for changes to Stream A, but I want TeamCity to actually populate the work area from a child stream; Stream B. In this scenario, Stream A would be the "watch" Stream.
Throw error on overlap detection. I'm not sure how possible this is but it would be great if TeamCity could show an error in the project list if one of the VCS roots has an overlap (i.e. conflicting changes) that will require a merge in AccuRev. The idea being that overlaps can very often cause issues in builds.
Poll based on AccuRev trigger. This may not be possible due to limitations in TeamCity, however it would be nice for the plug-in to only look for changes when told to do so by AccuRev, as opposed to polling the server at regular intervals for each VCS root (not sure if there are any issues yet with continuous polling in AccuRev).
I'm sure I'll think up some more later but again I'm really encouraged with the alpha and look forward to seeing this develop!
Hello Daniel,
Thanks for the feedback.
The way the AccuRev login works is a pain. Can you indicate which part complains about the login session? (e.g. change checking, checkout, etc.) The plugin checks if it is logged in and if not, it does a "accurev login " command.
The plugin use the "accurev hist" command to get the list of changes. So not getting upstream changes is an AccuRev limitation. I like your idea about the watch stream. That means we have a watch stream where we look for changes and a build stream that we check out.
The TeamCity server handles the polling for changes in VCS, the plugin just do the check when told to do so. But according to the TeamCity documentation a build can be triggered via a http GET command. One could add a GET to a server-post-promote-trig trigger on the AccuRev server to kick off a build in TeamCity.
Francois, thanks for this information. I wanted to give you the heads-up that AccuRev 4.7.1 will have enhancements to the command-line which will help you detect changes in a stream that have come through inheritance. This is really geared toward continuous integration applications and will greatly assist in plug-ins like yours.
Keep an eye out for the 4.7.1 release in the next couple of weeks.
Cheers,
~James Talbott
Senior Systems Engineer
AccuRev, Inc.
Thanks for the heads-up James! I was just about to upgrade the whole team to 4.7 so now I'll hold off a bit for this feature.
Hi James,
Did this feature make it into 4.7.1? I can't see it mentioned in the release notes.
Thanks,
Jamie.
Hi Francois,
The way the AccuRev login works is a pain. Can you indicate which part complains about the login session? (e.g. change checking, checkout, etc.) The plugin checks if it is logged in and if not, it does a "accurev login " command.
It seems to be every command that fails, even the "Test connection" button on the VCS root settings page. Is it possible that there are trailing spaces or carriage return from the CLI command under Windows that are affecting the condition? (if I look at the tomcat console there is a CR present in the response from secinfo).
The TeamCity server handles the polling for changes in VCS, the plugin just do the check when told to do so. But according to the TeamCity documentation a build can be triggered via a http GET command. One could add a GET to a server-post-promote-trig trigger on the AccuRev server to kick off a build in TeamCity.
That is definitely an idea. The only issue being that none of the checkout or trigger rules apply when you call that http GET command; you only seem to get that functionality if you use the poll-based approach (the http command is just like clicking the "Run" button in TeamCity). Given what you've said I might raise a feature request for the TeamCity guys to have a look at.
Daniel,
Actually, we already have the feature filed for VCS changes pushing. Please also see the issue comments for a way to configure the approach with the current TeamCity version.
Also, feel free to vote for the feature.
--
Best regards,
Yegor Yarko
Project Manager (TeamCity)
JetBrains, Inc
http://www.jetbrains.com
"Develop with pleasure!"
That's fantastic... until TeamCity has the smarts to trigger at the VCS root level I can extract the build type ID from the project/build configuration file anyway.
Thanks for pointing out that (presumably) undocumented feature!
I might have a scenario that was never thought through. I work in an environment which has multiple AccuRev servers (different machines). The only way I can see a single TeamCity installation working with both servers is if every call included the server name parameters ("-H server:port"). In the AccuRev code for RunProcess, there exists a setter method called setSessionToken(). If this parameter is set, the server name gets appended to every AccuRev call in the method addSecurityArgsToCommand(). Without it being set, no server information is appended. In the TeamCity AccuRev plugin, I see no reference to this method call. Is there a reason why I can't find it? Can someone look into this and add it? I may end up playing around with adding it myself locally.
Thanks
Hello Derrick,
I have not given that scenario much through because we only have one server with a single depot. Anyway, the TeamCity plugin is working with the AccuBridge Java SDK v4.6.0, and there is no setSessionToken() method in the documentation of the RunProcess() class that I can find. Also, I see no reference to addSecurityArgsToCommand() either. Do you have a newer version of AccuBridge Java SDK? That is the main reason why it's not part of the TeamCity plugin, I don't know it exist. ;-)
You are welcome to adding it to the TeamCity plugin. I can help if you need any. I would love to see how it works. The whole login/authentication scenario of AccuBridge is still a bit unclear to me due to lack of examples and documentation. Only got the AccuBridge API reference docs to work with.
Cheers
Francois
Hi Francois,
I rarely read documentation for the reason that it is oh so often incomplete. I go straight to decompiling. I am using the exact same version of the AccuBridge library that you've included in the plugin. I'll email you directly my code. I worked on this yesterday and got it working. Look for files with a July 13th timestamp and do a diff between them and your version to see what I've changed. If you merge the changes into the trunk and create a new build, let me know so that I can convert back to your build.
thanks
Hi Francois,
Regarding the "inherited changes do not appear in the stream" issue, have you had a chance to look at implementing the enhancements to the ACCUREV DIFF command?
As of 4.7.2 you can now get a full list of changed elements betwen two transaction references, including all of the inherited changes. The command you use goes something like this:
accurev diff -a -fx -i -v [STREAM_NAME] -V [STREAM_NAME] -t[TRANS_START]-[TRANS_END]
e.g.
accurev diff -a -fx -i -v MyStream -V MyStream -t10001-10003
This will return an XML list of elements from the specified stream as well as all parent streams. Note that the same [STREAM_NAME] is specified twice in the command.
The workaround we've been using for this has been to write our own "check out" script using an AccuRev Reference Tree, but these are not without their problems!
If you're time poor at the moment I might be tempted to have a go at this myself. Overall my team has found this plugin invaluable, particularly in unlocking the build triggering/vcs root rule functionality in TeamCity. Thanks again for your efforts on this.
Dan
Hello Daniel,
No I have not looked at it until now. I was still on v4.7.1. Thanks for mentioning it. Looks like just the feature we need.
Where is it documented that you can add the -t for the transactions? I looked in both the online help as well as the AccuRev CLI pdf, but there is no mention of the -t option.
Also, do you by chance know what values are possible for the What attribute in the Change element of the XML output? I found: "created", "version", "moved", "not found". Is that all?
I hope to work on this during the comming week-end, but I must admit, time is a bit tight.
Cheers
Francois
Hi Francois,
They're all the possible What values that I could find, looking at our own stream histories.
It is kind of strange that AccuRev have failed to document such an important feature properly. I think I got the syntax from the release notes.
This may just be me venting but overall there seems to be a bit of a lack of a focus on Continuous Integration at AccuRev, as evidenced by the fact the company hasn't released a single AccuBridge for any CI server. I find this particularly ironic considering the software is promoted as a best-of-breed product for "multi-stage Continuous Integration".
Having said that I would never want to use another SCM tool. ![]()
Dan
Francois,
I've had a try at incorporating the AccuRev DIFF command into the plugin.
One challenge I encountered is that the command actually returns a flat list of changes for a given Transaction range. What we really want to know is on what stream(s) the changes were made, when, by whom, etc.
The solution I implemented is as follows:
We've been trialling/testing the changes in our shop for the past week and so far so good. In particular the devs really appreciate being able to see the inherited parent stream changes flow down to their builds. One nice side effect of this is that having a "watch stream" is now possible, due to the fact the plugin will now collect changes all the way up the stream hierarchy. Also, using AccuRev include/exclude rules on the watch stream has become a very nice alternative to TeamCity VCS checkout rules because it will directly affect what gets populated in the TeamCity work areas and also in the AccuRev DIFF lists.
One last thing I need to do is to get my site working with Derrick's "set token" changes (for some reason it won't authenticate for me at the moment). Please let me know if you'd like to try the changes and possibly put them into the trunk.
Cheers
Dan
Pleased to announce the following changes have now been committed:
- INHERITED CHANGES SUPPORT ADDED
Promoted changes inherited by the VCS root stream are now included in the TeamCity changes list (previously only promotes directly affecting the VCS root stream were included). Any other changes, such as reverts, stream basis time modifications, or changes resulting from re-parenting of a stream are grouped into a generic change group with the comment "OTHER INHERITED CHANGES".
- DEFUNCTED/REVERTED ELEMENTS SUPPORT ADDED
Versions of files or directories that are removed from a stream will now show as removed or edited (depending on the outcome) in TeamCity.
BUG FIXES
- AccuRev plugin error "Index: 0, Size: 0"
http://youtrack.jetbrains.net/issue/TW-6883
- AccuRev plugin error "Unable to find the last transaction ID!"
http://youtrack.jetbrains.net/issue/TW-6884
- (TBC) AccuRev plugin update problems
http://youtrack.jetbrains.net/issue/TW-8017
- Changes to existing elements in AccuRev were sometimes showing as "added" elements instead of "edited" (occurred the first time an existing element was promoted to a stream).
I just tried upgrading our TeamCity server to use the newest version of the AccuRev plugin (we were previously using 0.2), and this version breaks for me. When it tries to run the "accurev update" command, the command fails and prints its help page as though it doesn't recognize the arguments that are being passed to it; I think it doesn't recognize the "-p" option (at least, I don't see that option in any of the official documentation, and it fails when I try to run it manually). This leads to the AcRunCommand class getting an IndexOutOfBounds exception when it tries to parse the XML output. I made a bug case here: http://youtrack.jetbrains.net/issue/TW-9872
Any idea what might be going on?
This may have something to do with the plug-in's handling of the "Clean all files before build" option on the VCS settings page, but I'll need to confirm that after some investigation.
Confirmed the issue was in the 'clean build' option; was a victim of some last minute refactoring of mine.
Now fixed in latest build: http://teamcity.jetbrains.com/viewLog.html?buildId=26515&buildTypeId=bt138&tab=artifacts
The fix worked for me, and everything seems to be fine now. Thanks!
A bug which can cause failure of change list population and prevention of build execution has just been fixed.
We discovered the issue this week when element ID of a directory/file changed during a 'move' operation.
Build available here: http://teamcity.jetbrains.com/viewLog.html?buildId=29123&buildTypeId=lastSuccessful&tab=artifacts
I found and submitted another bug a few weeks ago: http://youtrack.jetbrains.net/issue/TW-10438
I was just curious if you had seen that, since there haven't been any official comments on the case.
Hi Phillip,
Apologies for that, unfortunately I don't have a way of subscribing to those YouTrack bugs at the moment.
Regarding the issue, I'm not entirely sure what's going on here. Can I suggest you try manually running this command on your TeamCity build server and let me know if the permissions are retained?
accurev pop -H [accuRevServerName] -fx -R -O -v [streamNameToPopulateFrom] -L [directoryToPopulateInto] \.\
e.g. accurev pop -H accurev:5050 -fx -R -O -v FR -L E:\Program Files\TeamCity\temp\accurev6205070683 \.\
This is the same command that the plugin uses to initially populate the vcs root's working area.
By the way I've noticed that TeamCity seems to populate a separate directory to where the build actually takes place, i.e. it first populates a TEMP directory similar to the one mentioned here and then transfers those files over to WORKING. Not sure if anything is being lost in that file transfer but it's something to bear in mind.
Dan
Manually running "accurev pop" does produce files with the right permissions.
I'm not really familiar with how TeamCity moves around files internally, but we have a central build server and several build agents that connect to it; based on what I've observed, it looks like the "accurev pop" command is run on the TeamCity server and then it uses some other mechanism to copy the files over to the agents where the compilation is actually done. Perhaps the executable flag is being lost during that transfer?
That's interesting. Just to be absolutely sure about this though, do you use the "clean all files before build" option on the Version Control Settings tab (this causes the ACCUREV POP command to be called every time, instead of an UPDATE)? If not if you could try that and confirm the permissions are still being lost... that would be a good case for JetBrains to take this up.
Currently the "Clean all files before build" checkbox is disabled for all of our configurations. For what it's worth, I can verify that in all of my normal AccuRev workspaces, running the "update" command doesn't cause files to lose their permissions.
I can try it, but even if it works, I don't think that will really be feasible for us in the log run... we have several projects with multiple build configurations each that have source trees that are several GBs in size, and repopulating the tree every time a build is triggered could cause some serious performance issues.
That's cool, I was mainly interested just to try it to see if the problem was limited to the UPDATE command.
So if its not the update that is responsible, the culprit is more likely to be the plumbing between the agents and the central build server. Unfortunately this is all controlled by TeamCity so I'm not sure how much can be done with the plug-in. Perhaps this is worthy of a broader post on the TC forums?
Please have a look to the comment for the mentioned issue at
http://youtrack.jetbrains.net/issue/TW-10438#comment=27-92865
Actually, TeamCity provides PatchBuilder interface for tha plugins to build a patch.
This is done on the server.
The patch is send to the build agent and that executed in the same order as it was built.
The command of updating a file contains fileMode arguement. If that argument != null, build agent will run chmod command for the local file.
Does AccuRev plugin use this attribute?
On the other hand, agent side checkout will let plugin do update local filesystem.
Daniel,
Actually, there seems to be a way to subscribe to issue events in YouTrack.
You can try the following:
I've seen another issue occur where occasionally, the sources on the build agent will stop updating, even though the TeamCity GUI indicates that the sources have been updated and rebuild. I went ahead and entered a case here: http://youtrack.jetbrains.net/issue/TW-10825
Unfortunately, I haven't yet figured out how to reliably reproduce it, but I have seen it happen a few different times, so it definitely wasn't a one-time fluke.
Has anyone tested the latest plugin with TeamCity 5? We recently setup a TeamCity 5 server, running under Linux, I have installed the latest AccuRev plugin, but it doesn't seem to detect changes anymore. When I click build it does seem to pick up the correct source code, but the monitoring of changes doesn't appear to be working.
Previous I was using TeamCity 4.5 on a Windows box, so there are a number of things that have changed now - not sure which one has caused this issue?
Any ideas?
Steve
Hi Steve,
Actually I'm not sure myself since we haven't upgraded to TC 5.0 yet (we're still on 4.5).
I've just installed 5.0 on a test Windows server so will set it up and see if it still works. Will let you know how I go.
Cheers
Dan
Fantastic.
Thank you.
Hopefully your endeavours with your test Windows box will issolate if the issue is with TeamCity 5 or with the fact I am now running a Linux based server now.
Steve
Just to keep you in the loop, we have tested it on a Windows test server (running 5.x) and it appears to be working, so I wonder if the problem is specific to Linux. Do you know if anyone has run this plugin with a Linux server before? We have compiled the plugin ourselves, are there any areas that spring to mind that might have issues with Windows/Linux differences that we could look at?
Steve
For what it's worth, we're running TeamCity 4.5 on an Ubuntu Linux 8.04 server with the AccuRev plugin, and we haven't encountered the issue mentioned above. In fact, the issue we have is practically the opposite -- sometimes it will detect changes in the source stream but not actually download the new source code. :-) The case is detailed here: http://youtrack.jetbrains.net/issue/TW-10825?query=%23{3rd+party%3A+AccuRev+plugin}+%23Open
Doh, got to the bottom of it, I was pointing it at our old AccuRev server, Oops!
Sorry for the confusion, we can now successfully debug the AccuRev plugin in Eclipse now though.
We don't actually use the AccuRev plugin to checkout our code for us, as it takes ages (about 20 minute), we just use it to monitor streams and decide when builds should run, then from inside the build runner we checkout the code manually (which takes about 40 seconds) - so we may extend the plugin to add client side checkout support. If we get this done in a half decent manner I will try and get it shared back on here so others can make use of it, should they wish to.
Steve
I'm glad to hear that Steve, thanks for the update!
Regarding the checkout problem, I have finally got off my lazy behind and raised this with AccuRev.
One thing that may really help is if anyone experiencing the problem could post snippets of their "stdout_yyyymmdd.log" file (available in the "<TeamCity Data Dir>\Logs") from around the time that the bug occurs. It might be a bit of to-and-fro to get this one resolved.
For anyone interested, the workaround for this we use is to create a sub-stream under the stream we want to checkout from. We then add include/exclude rules to that sub-stream so that only the elements that are required for that particular build are included in the checkout. We then setup the TeamCity VCS root to monitor that sub-stream, which in turn watches all of its parent streams. This generally results in much faster build times because only the required files are monitored for changes and retrieved during the "clean build", rather than the entire depot. This has helped us keep all of our build processing times < 4 minutes total. I can understand that this may not work for everyone, though.
What we do is create a temporary stream (or multiple temporary streams if there are multiple concurrent checkouts), and then parent said stream to the stream we are interested in, and then set a time basis to the transaction ID we are interested in. We then use the populate command to get a copy of the code. As I mentioned, this whole process normally takes around 40 seconds on our new server, where as we find the plugin takes substantially longer. We have always found this with the plugin, I wondered if it was to do with the fact our checkout side is about 1 GB so it just took a while to do what ever it is it currently does (as it is doing it server side, I am presuming it has to send the files back over to the agent, not sure what overhead is there?).
Steve
I have augmented to AccurevPlugin to support agent side checkout.
This has reduced the amount of time required to perform a checkout from 16 Minutes to under 2 minutes.
We would like to get theses changes integrated into the official plugin and were wondering how to proceed.
Please advise:
Thank you
Hi Abraham,
That's fantastic, if you'd like to send on your source code changes to me I can check them into the trunk.
Thanks,
Dan
For what it's worth, I would be eager to help test this if any help is needed. :-)
A quick question about the implementation of agent-side checkout: does it account for AccuRev possibly being installed in different locations on different build machines? On some of ours it's in /usr/local, on others it's in /opt... it'd be great if it looks for it either in the PATH or if there's an agent-specific property that can be set to indicate where it is.
the Build agent expects accurev to be on the path.
We are just putting the finishing touches to the plugin.
I will send you the source code once we have eliminated all the major bugs.
Thanks
I have attached all the files to this post
Thanks! I upgraded the plugin on our server and so far everything seems to be working well.
Fantastic. We have had it running on our test server for more than a day now, and so far, so good. Up until now we have had all the AccuRev populate code living in our build runner, so it is nice to now have everything done in the right place. A few of the changes Abe has made are reasonably specific to our requirements (being able to have separate watch/populate streams, being able to specify a populate subdir in the VCS node, doing an agent side populate from a time based stream) but hopefully they'll work well for everyone else too.
Initially I wasn't very keen on having these 'temporary' streams created for Teamcity agents, but now I find it quite useful as you can see (in AccuRev) exactly what code an agent is checking out, and even attach a workspace to the stream and get the code yourself.
The two remaining things on our potential improvements list is:
- Being able to trigger an AccuRev promote upon successful build/tests, although right now we haven't found a way to do this.
- Adding personal build support - right now it seems this is quite linked in to IDE's so isn't so straight forward to do. But at some point we'd like to be able to send up a users workspace for building/testing
If anyone has any other ideas of useful features it'd be worth while posting on here, be interested in seeing what other things could be handy!
Steve
Based on my observations, it seems like when build configurations are set to checkout-on-agent mode, every time a build runs it re-populates the directory from TeamCity's build stream. This can take a while for large streams, and waiting a few minutes for it to repopulate when only a few files have changed seems a bit excessive.
It seems to me like it would be a good idea to, in addition to creating a stream for each build agent and each VCS root, also create a reference tree off of that stream so that the "accurev update" command can be used to quickly change between revisions without repopulating the directory.
We haven't used reference trees for anything here; we have about a 1GB populate from AccuRev, which takes around 1 minute; I have experimented with using a workspace instead, but for us, the amount of time it takes to completely revert the workspace (and remove external files and so on), to get the workspace back to its populated state, took as long or longer than doing a fresh populate. From what I have read about reference trees so far, it sounds like they'd have the same issue.
What size checkout do you have? How long does it take? How long does it take you to fully revert a reference tree to get its back to it's populated state? It'd be interesting to compare notes.
Steve
Not all of our build agents are on the same network segment as our AccuRev server (in fact I don't know if any are...), and some of them have to go through 100 Mb/s links, so it's not necessarily very fast -- we've got one 1.1 GB source tree that I regularly see 3-4 minutes to populate, and a 3.6 GB tree that takes 10-12 minutes. There are other trees, too, but those are getting the most activity at the moment. That same 3.6 GB tree has 61 build targets that depend on it, so it takes a long time to do a complete build if it repopulates the work directory for every build. :-)
Maybe I'm not clear on something -- is the AR plugin cleaning out the source tree between every build? I wouldn't expect that to happen unless the "Clean all files before build" flag is explicitly turned on. In fact, we have a few build scripts that expect the artifacts from the previous build to still be there. (I know, it's bad, but they're legacy scripts that were in place long before we started using TC, and we haven't had the time to rewrite them.) If the agent-side checkout code was using a reference tree for building, I would expect it to just do an "update" between builds and leave any modified or external files in place unless it was specifically told to clean the agent's sources.
In practice, if we ignore any modified or external elements and simply use "accurev update" to move between different versions of a workspace or reference tree, how long it takes only depends on how much has changed; it only takes maybe 10-15 seconds to update a workspace that's had only a few changes. In the worst-case scenario, it takes about as long as a normal full populate would. We have our build configurations in TC set up to automatically rebuild whenever something in the appropriate directories has changed, so usually changes to the stream between builds are minimal; when using the checkout-on-server mode, it usually takes maybe 10-15 seconds for the server to acquire the changes and copy them over to the build agent. I haven't done any specific testing with reference trees, but I would expect them to be about the same; from what I understand, they're basically like read-only workspaces that are specifically intended for automated building.
If you actually need to do a complete wipe and repopulate of a workspace with the latest code from its parent stream, probably the easiest way to do that is to just delete the whole directory, then run "accurev update -9" and then do a populate. If you're not familiar with "update -9", it's an undocumented flag that marks a workspace as being "updated" in AR's database but does not actually change any files on the disk. Its use is usually not recommend, but sometimes it's helpful.
Just out of interest Steve, what is the specific requirement you have for different streams for populate vs watch?
I only ask because the plugin already checks all of the parent streams (presuming your populate stream is a child of your watch stream). Is the goal to avoid detection of changes on the populate stream?
We have a reasonable sized code base in AccuRev, so we have filter streams to get rid of a lot of unnecessary content for a given project, and then have everyone parent off of the filter stream. The problem we found previously was when attached to the filter stream we didn't see changes from above, but as you say, this has now been fixed, but something else we (well Abe) is adding for support for now is the ability to promote on success (optional), which wouldn't work if we just pointed directly at the filter stream (there'd be nothing to promote in the filter stream). So we end up having it something like:
Watch : ProjectA_GAMEBUILD
Populate : ProjectA_GAMEBUILD_Filter
And if that succeeds, it automatically promotes the code in ProjectA_GAMEBUILD, up to the transaction tested.
Maybe there is a better way to do all this? It is what we have been doing up till now (with out own batch files to handle the AccuRev side), so we are just trying to get it a bit more integrated with the plugin.
On a side note, we have noticed the 'seeing changes from above streams' doesn't stop at snapshots (not sure about time based streams) - we were going to have a look ourselves at fixing this, unless it is something you are already fixing, or know can't be done due to AccuRev limitations etc.?
Steve
I have made some enhancements to the accurev plugin.
I have attached the changelog and the source code to this post.
Appologies for the lack of details in the change log.
I made the changes over many weeks/months and some of the details escape me.
Any problems just let me know.
Thanks
Thanks Abraham,
I'll take a look at the changes you've provided.
By the way, I've meant to mention that I've been in contact with AccuRev regarding the incremental workspace update problem (i.e. the issue that occurs when the "clean all files before build" option is not checked).
They have indicated that the method that was implemented in the plugin is not supported. The method that is used is basically a single "ACCUREV UPDATE" CLI command with a transactional range (From Transaction A to Transaction B/C/D/E/etc), however AccuRev have indicated that only one transaction can be specified at a time using this command.
This would explain why on some occasions changes don't get retrieved from the repository, because in order to do so you would need to make individual calls to "ACCUREV UPDATE" to retrieve changes in Transactions B, C, D and E.
I'll have a look at implementing this change when I have some downtime, unless of course someone else is keen to have a go!
We are just getting started with TeamCity but we use Accurev very heavily so are interested in contributing to development of the Accurev Plugin.
We have around 10GB of source code/data that we push around via (yeah, I know, too much really) so having efficient Agent-side updates is going to be a big concern for us.
We're still getting set up for plugin development etc but if there are pending things to do that people haven't got time to look at, please let me know about them as we will have some resources to contribute to this ![]()
Cheers,
Mark
10 GB, wow that's quite a lot. What is it you work on, if you don't mind me asking - I'm just curious!
The agent side plugin was just developed to meet our needs initially, which is to do a fresh AccuRev populate of the given stream at the given transaction. We have about 1 GB of source code and it takes a minute or two to populate it, I don't think you'd want to do that every time with 10 GB of data. So I think the first thing you'd want on the agent side checkout side of things is to implement an incremental checkout option. We were going to look into this by using reference trees, but as of yet we haven't started on this task (and hadn't got it penciled in for anytime too soon). Ideally this would also make sure the source tree ends up correct, e.g. if the build processes modified a sources file, that source file should be reverted etc.
There are probably a few other enhancements to the plugin that could be made, if I think of any good ones I'll post here!
Steve
We are part of Disney and make Racing-type games on PS3 and Xbox 360. Thus far (for Disney) we've done Split/Second: Velocity and Pure: http://www2.disney.co.uk/disneyinteractivestudios/blackrockstudio/
My role as part of that is being Lead of the Infrastructure team that supports our game teams with code/data builds, web apps and maintains a pool of consoles and blades for lots of automated builds and tests. This is a bit of a growth area for us as we've gone from 4 build machines about 3 years ago to 40+ build blades and 24 test consoles. We do a lot of automated testing ;-)
A lot of our accurev workspace size is taken up by 3rd party libraries, which we tend to check in for easier deployment (e.g. things like Havok, Qt, Fmod and platform SDKs). Right now that's about 70% of the workspace, so we do have a plan to move over to a more linux-style 'package' system that would manage installing those libs on-demand on a machine and sharing them between multiple workspaces. When you have multiple workspaces on a single machine, it eats up a lot of space right now.
We have a lot of our own source code too, as well as some (small) test assets that get checked in to be used in unit tests, so that all adds up and we'd still have about 3GB of source 'code' even after stripping out out 3rd party libs.
We do have an existing continuous integration system that is a bespoke one - it's basically a bunch of python scripts (we really like python) that run on each build machine and periodically grab code from Accurev to test. It has worked well for us in the past but as we want to do more advanced things (like splitting builds between machines and automatically grabbing a 'free' machine to use, recovering from machine failure) and need a better UI for changing build configurations, we've decided to move over to TeamCity.
Incremental checkout (or 'update' in Accurev terminology) is going to be a big issue. To start with we are going to lock each build configuration to a specific Agent, so incremental checkout would be a big win for us. (also this mirrors what we've done in the past with our bespoke system). This will need an accurev Workspace be created per Configuration/Agent combination, but that shouldn't be a big problem as they are pretty cheap in Accurev.
The same is going to be needed for our Perforce data, but I believe that plugin already supports it to some extent (at least in the beta 6.0 version if nothing else). Our perforce data (which is the game's raw data) will REALLY need incremental update because its over 100GB for a full set of data.
In the longer term I hope to move both Accurev/Perforce data into more of an 'on demand pull' system that grabs files from the server only when they are opened by a build process, rather than syncing everything up front. This would save a huge amount of bandwidth!
Hi all,
I'm very happy to say that we've just started work on improving the Accurev plugin to cover our use cases.
Initially that is to add a couple of things:
Agent-side checkout
This is a must-have for us; right now we are doing this using a python script on the agent, which works but isn't neat and throws off build timing (as the update/sync time is counted as part of the build time)
We handle building from a specific Accurev Transaction by creating a timelocked stream and workspace, as this is currently the only way to get this behaviour in Accurev.
Limited support for checkout rules
We want to specify that Accurev syncs to a sub-folder of the TeamCity Checkout directory, because for some builds we have checkouts from both Accurev and Perforce and obviously don't want them both writing to the same directory.
Right now the Accurev plugin doesn't seem to support the rule we want, so we'll be adding support for it.
In the future we might add more checkout rule support e.g. for including/excluding things from a Workspace based on the checkout rules, but for now we'll be implementing that by using additional Streams in Accurev and applying the include/exclude rules to them.
I'm hoping to have both of these working in the next couple of weeks, so should be able to update the plugin with our changes soon after that.
Cheers,
Mark
Hi Mark,
That's great to hear! Incidentally are you using Abraham's version as a baseline or the trunk version?
I'm just back from a trip but will have some more time now to have a look at all these great new features.
Regards,
Daniel
danere wrote:
Incidentally are you using Abraham's version as a baseline or the trunk version?
We are currently using the trunk version, which I had thought included the zip files posted here but now I realise they don't. Oops! Is that in branch somewhere already? We're going to take a look at the version from Abraham and most likely start from there.
We've already noticed the plugin is using the "old style" VCS APIs, but figured we'd get it working with those first and then look at porting over to the new API as a separate task.
That was my bad, I should have tried it out and looked at checking it in.
Would you like to code your changes on top of his version?
Holding off on the API migration for the moment is probably the path to least resistance, I would agree
.
Hi Daniel,
No problem at all, after looking at the new version we were very happy to base our changes from it as it already implemented a lot of what we wanted anyway!
For example, it already included a 'sync to subdirectory' in the VCS Root options so we don't need to implement Checkout rules after all.
We have added incremental sync to it and are testing it out at the moment. We also now create a timelocked stream as I mentioned before.
I could share a zip of sources/precompiled bin here when we're done or check it in to the repository - whatever is going to be better.
Cheers,
Mark
That's great Mark!
I'll talk to the TeamCity guys about getting you checkin access. For the moment it may be easier just to post the code as a zip.
Also I realise I still have a bugfix to checkin that I did recently to address an unhandled collect changes scenario. I'll patch this into your new version when you're done and then check it in.
Cheers,
Dan
Hi Folks,
I have tried to enable the VCS labeling option for Accurev and it seems to have no effect. I have selected the "Successful only" radio button and checked the VCS root to label.
Are snapshots supported in this plugin?
Best Regards,
Daniel
Hi Daniel,
I've never actually used this option so I'm not sure about the support aspect, but looking at the codebase there's definitely code implemented for the "label" function.
It looks as though it outputs some debugging information in the TeamCity logs. Is there anything illuminating in there?
Dan
Hi Dan,
You're right... the stdout _YYYYMMDD.log file shows all accurev commands issued during a build.
An mksnap command is being executed which works perfectly well from the command line, but doesn't seem to make any difference during a TeamCity build... strange.
I'll take a closer look at this on Wed (tomorrow is a national holiday in Brazil) and will post here any findings I happen to come across.
Cheers,
Daniel
I am about to make further changes to the accurev plugin.
Can I please have access to the plugin's Version control repository.
Thanks
Hi Abraham,
I have a number of changes to commit myself.
We've not cleaned them up fully yet but I can quickly bundle up what we've got an post here as a zip.
UPDATE: attached source and prebuilt zips
Cheers,
Mark
Hi guys,
After a bit of a delay I believe we now have a candidate for the next version (0.4) of the plugin.
We've been working with the new version on our site for the last month or so and it looks great. I'm going to checkin the code to the TeamCity SVN repository sometime this week but thought I would post it here first.
Note I've made a number of minor changes to Mark's version of the plugin:
I've also updated the README.TXT with the wonderful new features you guys have added.
Regards,
Daniel
Excellent stuff, thanks Daniel!
Hi Abraham/Mark,
Can you guys go here and setup TeamCity accounts if you don't already have them (this is to run builds of the plugin):
http://teamcity.jetbrains.com/registerUser.html
Then could you send me an email (see my profile) with your account names? The Jetbrains guys will then setup your corresponding SVN accounts.
Thanks,
Dan
Hi,
I am working on windows platform where a filename (inluding full path) normally can be no more than ~260 characters.
In this environment, when using AccuRev GUI to populate a workspace where the combined path and filename with workspace path is exceeding this maximum limit, then AccuRev just crash and does not populate properly. For the GUI the workaround is to rename the workspace path to be shorter so it can be populated in a path which does not exceed the limit.
When using the AccuRevg plug-in to do server side checkout, this is problem. As far as I can detect, it is only possible to define the agent side path but not the temporary path for the server side checkout. So I can see that it defaults to something like "C:\TeamCity\temp\accurev23658965311886311583148321255833" (some kind of random digits of very long length). This means that my temporary folder easily exceed the maximum limit even though my agent path won't. This means that I cannto use server side checkout and I am forced to used client side checkout, which in my case means a lot of installations of AccuRev on each build agent.
Is there anywhere this temporary folder can be defined today so I can use a shorter path?
If not, can the plug-in please be updated with such feature?
Thanks,
John Ray
PS. It works when I do agent side check-out, but this requires quite a lot of AccuRev installations, one per agent. Also some features such as excluding directories cannot be used with agent side checkout. Because of this it is unfortunately not a very good option.
PPS. I started a separate thread on this topic, but Michael Kuzmin suggested me to post to this thread instead.
Hey guys,
I'm currrently upgrading our build system from Cruise Control/NAnt.
I had intended using TeamCity because Pre-Tested commits are a big requirement.
Are there any plans to support Pre-Tested commits/Remote runs in the plugin?
Is this something that should be implemented by each user based on how they use AccuRev?
thanks,
Pete
Hi Pete,
There are no current plans to introduce Pre-Tested commts/Remote runs in the plugin.
I am the only developer remaining and unfortunately my time is needed elsewhere at the moment.
If you or anyone else would like to step forward and take the lead on the OSS project please let me know, and I can help get you access to the JetBrains-based repository and builds.
Regards,
Daniel
Hi There,
is there a planned release to support Accurev 5.3a at all in the pipeline?