Stop Breaking the Build
Cap'n Grumpy writes "You know the score - you've just finished some coding, do a final cvs update before commiting, and all of a sudden all hell breaks loose. Your code now refuses to compile, or xunit starts flashing up red - test failures! One of the other members of your team has checked in something which breaks the build, and they just went out for lunch ... Argh! Did you know there is a solution to this problem? It is a system which makes it impossible for people to check in code which does not compile or test successfully. It allows coders to review others coding efforts code before it goes into the baseline, rather than after. It organises your checkins into logical change sets. It enforces continuous integration. It is linux based, and GPL'd. It's called Aegis."
run the code through a lameness filter before allowing the check-in
enforce a 20 second delay from the time you want to check-in to the time you are actually allowed to check-in
make sure a different developer checks-in the exact same code a day or two later
Is it just me or does this sound like an advertisement?
If there is an Eclipse plug-in for any of these CVS alternatives, I'd give 'em a try.
But what is the point if your development environment doesn't support these versioning systems?
Tiny minority of programs ever written for Unix systems?
Well, you sound quite uninformed (Or acting as uninformed). All I'll do is the server you are using RIGHT now is written for a Unix system, just one simple example for you.
Lots and lots of stuff more, without "Unix systems" computing wouldn't be as good as it is now. It's a very important type of Operating systems!
"What you 'seek' is what you get!"
It's just you :)
"What you 'seek' is what you get!"
Allowing multiple developers to edit the same file at the same time is inherently more dangerous than a more conservative approach. Open Source has it's own special needs, but for closed source development you should rarely need to edit the same file unless your team is poorly organized or system poorly designed.
Say what you will about the importance of Unix systems, but it doesn't change the fundamental fact that most medium to large-scale programs are written for Windows computers.
Unix programs are very specialized, filling niches that require high levels of stability. Therefore you see Unix used as the core of large business running only a handful of programs (server software, database software, etc). Once a Unix system is running smoothly, there is only a need to maintain the exisitng software, not buy or write new software.
Windows, on the other hand, is everywhere. Everyone uses it (except for a few OS bigots) and that creates a market for new programs. Which brings us back to the original point, which isn't that Unix systems only make up a fraction of the total amount of software, but that it would be interesting to know about a system like Aegis that worked on Windows.
Nothing against Unix at all. It's a nice OS for some things.
I have been pwned because my
Check this out from their website:
Aegis is mature software - it was first released in 1991.
GMD
watch this
At work, we use CVS, and our build tools guru has it set up so the checkins fail unless we've build without errors first. The testing isn't integrated (it can't be, as we're cross-compiling for an embedded system), and you can break the build by doing a partial checking or with bad interaction between different checkins, but for the most part it works really well.
It seems like common sense for most projects to refuse to allow checkins without building first, and that's the sort of policy that can have a fairly effective mechanism for enforcement.
Well, I think there is more work done on unix systems, and more programs are developed for unix systems than there is for windows systems.
The server side of computing is not really as narrow as you have explained it.
Another thing is, no, not everybody uses Windows, I do use it, but since we are here in slashdot, I'm telling you that most of the users around you use, and love, linux and apple systems, and use them as workstations as well (I have a linux work station although it's not my main pc too).
The idea that developing programs for windows is more important is wrong, I really don't like to spend my time developing a program to help Microsoft gain more power in the monopoly.
I am not much into software development for the time being, but if I get into that I'll always make sure to build programs for linux BEFORE Windows (or make portable solutions).
It's just that Unix is a nice OS for MANY things, not some things!
"What you 'seek' is what you get!"
(And for that matter, if you need to track software bugs & other issues, RT rocks. Don't bother with Bugzilla, it's not half as good as RT is for most of the same tasks. And no, no one is paying me to endorse RT or anything, it's just great software and, in reference to Aegis, I respect the judgement of the guy developing it...)
DO NOT LEAVE IT IS NOT REAL
There is a rule for check-ins when my team is trying to stablize code; that is have another developer go through your changes in case you did something silly. It also serves as a mini code review. This includes making sure the code builds. :)
I was going to yell troll, but I don't know which of you to point the finger at.
Yeah, it's a troll. Still, I feel like munching on a little troll.
In fact, there are more installed UNIX servers in large scale operations than there are Windows servers (I work for a company that sells hundred-terabyte disk storage systems, to those exact operations, and more than 60% of our non-mainframe-using customers are using Solaris, AIX, and HP/UX, with Windows rolling in at about 35%).
On the whole, Windows is completely unsuited to enterprise-level programs and projects. It has a laughably low limit on the number of attached disk devices, as well as ludicrious limits on how big those disks can be. Sharing disks between clusters of Windows servers is tenuous, at best, and not recommended for high-risk environments.
Unix(es), on the other hand, grew up in the enterprise, and is quite well suited to that environment. Just as an example, I am aware of at least ten multi-national banks that operate only Unix in their transaction processing centers, which is one of the most demanding enterprise solutions available. Only Unix. No Windows in any of their datacenters.
The fact that there may, or may not, be a system like Aegis for Windows is irrelevant to your original message, which explicitly anointed truth to things which are wholly untrue.
Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. (Einstein)
I fail to see what you posted that contradicts my post in any way.
Yes, Unix is good for some things. It's very reliable. It's got lots of things going for it. It's used as the backbone of a lot of important businesses. I said all this in my post.
None of that changes the fact that most software today is written for Windows and that developers of Windows applications would benefit from an Aegis system.
It is you who is the troll here, not me. Shame on me for responding.
I have been pwned because my
On a network, does it only work on a shared filesystem like NFS?
1) Post advertisements as news articles
2) ???????????????????
3) Profit!!!!!!!!!!!!!!!!!
...and they just went out for lunch ... Argh! Did you know there is a solution to this problem?
Go to lunch.
but it doesn't change the fundamental fact that most medium to large-scale programs are written for Windows computers.
Maybe medium scale, but certainly NOT large scale. Large scale programs, say like weather simulators or 3D rendering applications or genetic sequencers pretty much always run on UNIX.
That's why I qualified it as "medium to large-scale" programs. Unix rules the roost with small programs which really don't need a system like Aegis and in the high-high end as well where a system like Aegis is indispensable.
The middle ground which makes up the bulk of programming (tossing out one-offs, of course) is dominated by Windows programming.
Which brings us back to the original question, is there a system like Aegis for Windows?
I have been pwned because my
Aegis is great for the tiny minority of programs ever written for Unix systems.
That's _obviously_ troll.
Well, as odd as this might sound, when anybody checks anything to our source control that breaks the build, they have to go out and buy the entire development team a coffee and/or chocolate cookies. This worked like a charm. It not only raises awareness and makes people more careful, it has actually increased moral in the team as we look forward to the weekly build to see who has cocked it up :-)
Never, ever lose a file again. Ever.
2-3 times a month we get Krispy Kremes. That is the penance for breaking a nightly build. Engineer or build meister. Screw it up and bring in the donuts.
The base ball bat. At my work after we beat the first few developers to a pulp after they checked in broken files, we found that the rate of broken files decreased dramatically
From the Aegis webpage: Most sites using Aegis and Windows NT together do so by running Aegis on the Unix systems, but building and testing on the NT systems. The work areas and repository are accessed via Samba or NFS.
May we never see th
None of that changes the fact that most software today is written for Windows...
I'm not so sure about this. A significant number of UNIX users constantly write new, say, perl programs. The total amount of code being generated there may be significant.
I'll agree that Windows is certainly dominant in the closed-source, horizontal market area -- but while horizontal markets produce a lot of sales, they don't necessarily mean that all that much code gets written.
May we never see th
We had the same policy at my last workplace. Did we work together? Mad or cruel as it seems, it worked.
I wish they'd implement a scheme like that where I'm working now. They haven't quite got the hang of source control. Most of the time, the version under source control doesn't even compile, let alone run. No-one, it seems, bothers with a local merge and test before checking in. Also, everyone works using data off a shared network drive, so when any of that changes, you're screwed.
I need a new bat. With rusty nails.
Okay, I agree with you that the /. editors were on crack when they made that call. But the idea of "filter before checkin" has been in CVS for a long, long time.
Basically, there's a file in CVSROOT that can call an arbitrary program. If that program succeeds, checkin proceeds. If it doesn't, it doesn't. :-)
I was very surprised to see this article treat such an idea as something new.
You cannot apply a technological solution to a sociological problem. (Edwards' Law)
You specifically said that there is more Windows software being written in medium- to large-scale operations than Unix software. This is patently false, and is in fact contradicted by reality. There's your contradiction.
Only two things are infinite, the universe and human stupidity, and I'm not sure about the former. (Einstein)
Which brings us back to the original question, is there a system like Aegis for Windows?
No.
Sucks to be a Windows user.
-g.
CVS ensures mutual exclusion over an entire tree when you commit, and performs an up-to-date-check which will fail your commit if *any* files, including ones you did not touch, have new revisions that you have not incorporated into your working copy.
Taking advantage of the ``up-to-date check failed'' feature requires that you do a whole-tree commit at some level of the tree structure that you care about---perhaps the project root---rather than doing a selective commit on individual files. Change to an appropriate directory level and execute a ``cvs ci'' without any filename arguments.
The other part of the equation is doing a proper regression test before committing. It would be nice to automate this, but in the real world, that is a pipe dream.
What if your tests have to be executed on something other than your development platform, such as a PDA or embedded system? What if you are targetting several flavors of Unix-like operating systems and Windows?
Your regression test run on Linux does not assure you that you did not break the Win32 version of the program.
That's not to say that there isn't value in running at least *some* automated tests, like for instance exercising the functions of some portable library.
A lot of times, I just send a copy of the build failures to the person who broke the code. But the real problem is that, we use vss. With all the GUI tools, you'd think it'd be a no brainer to do a "project difference" before going to lunch, but 1 time out of 10, that step gets skipped.
But the best way is to just have a neutral machine that no one develops on. It's just for getting updates and doing test builds.
Aegis calls itself a project change supervisor. It's nice that there's a framework, especially for large projects. For small ones, throwing wads of paper or other methods of embarrasment works fine.
A programmer is a machine for converting coffee into code.
What do you mean by Linux-based? Stop talking bull, Aegis does need to ride on the Linux hype to be useful; mostly because it isn't Linux based in the first place you dumb fuck!
Whether Peter Miller's favorite policies are optimal is not the issue to me. For me, an important aspect of free software is that the owner of a computer is given maximum control. If the group maintaining a piece of software is basically trying to wrest that control from the computer owner, then my distrust of that group is enough so that the amount of work I would have to do in studying every line of their code and undoing their logic bombs is exceeds the productivity benefits that I would expect from using the software. For me this attitude problem is the critical issue. If this problem were fixed, I would probably deploy and contribute to Aegis.
For completenes, I'll mention a couple of other issues that other people considering using Aegis might find helpful to know about, although fixing these other issues probably would not tip the balance for me as to whether or not I'd choose Aegis.
Firstly, Aegis has a bit of an unncessary learning curve because Aegis does not use commands compatible with cvs, sccs or rcs when this is possible. If you invest time in learning Aegis commands, you will not get a return on that investment elsewhere. In comparison, BitKeeper uses rcs and sccs command names and options when possible. I consider Aegis's freeness to be more important than BitKeeper's rcs/sccs command line familiarity, and would also consider incompatible command names and options to be worthwhile if the new syntax were a enough of a user interface improvement, but that doesn't seem to be the case here.
Secondly, I've become skeptical that Aegis really needs to be a single software package (yes, I know that "cook", Aegis's recommended replacement for "make", is distributed separately from Aegis). I'd like a cvs variant (incompatible if need be) that would suport atomic operations, symlinks, inode information, renaming files, and maybe some distributed development features. I think Aegis's repository control based on regression testing is a great idea, but I also think that it could be implemented more simply as a separate package that used some kind of cvs successor (or, ideally, was retargetable to a number of software repository types).
I think Aegis has some great ideas, but I currently think it will be less work, especially in the long run, to find or make something that I like better.
share the filesystem over nfs or samba, and make aegis log into the windows box as the appropriate user. You need to be able to do your building or testing etc from the command-line.
The reason you cannot use Aegis in a multi user environment on cygwin, is because the setuid method on unix is still too different from the windows counterpart. If you want the details on that restriction, consult the manual or website...
This space is intentionally staring blankly at you
Make sure that the proposed checkin builds correctly. Make sure that there are tests written for this exact change. Make sure that the source is up to date with the baseline. Then make sure that somebody else reviews the code. Then try integrating it. Rebuild those parts of the program that were touched and run the tests again. Make sure it is still not out of date with the baseline. If that all works out, then you can put your change in the baseline.
Sounds Complicated? It is if you dont use a tool for it. Or you could just use Aegis to help you write better code.
This space is intentionally staring blankly at you
CVS is a history tool, it stores older versions and branches.
Aegis is a Process tool, it helps you adhere to a particular model for developing software.
This space is intentionally staring blankly at you
If the cvs server has not checked your files in yet, how can it use them to test the build? That is not cvs behaviour but some wrappers around cvs. I am sure that if you are persistent you can bypass them easily.
This space is intentionally staring blankly at you
If you dont like NFS, you could use any other networking filesystem, maybe samba? aegis doesn't care.
This space is intentionally staring blankly at you
"... you could have had another developer creating a *new* call to that function in their own working copy of the code. You would, of course never catch that, and they might not either... "
This exact situation happened to me and my boss put my name on the build breaker list. I thought it was a bit rough given that I'd taken all the nescessary precautions against breaking the build and fixed all the code that currently used the function - surely I couldn't be expected to go around and ask everyone if they had any code checked out that used that function! We checked in our code within five minutes of each other. Pretty tough to prevent.
On this project we had a machine doing automated hourly builds, we all got an email if the build was broken and the person responsible would get their name put on the list and got a hard time from everyone. Seemed to make people more careful about changes they made.