John,  I apologize for top-posting.  I will insert notes in your email, below:<br><br><div class="gmail_quote">On Tue, Aug 17, 2010 at 11:31 AM, John Arbash Meinel <span dir="ltr">&lt;<a href="mailto:john@arbash-meinel.com">john@arbash-meinel.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">-----BEGIN PGP SIGNED MESSAGE-----<br>
Hash: SHA1<br>
<div class="im"><br>
Maritza Mendez wrote:<br>
&gt;<br>
&gt; I am running bzr 2.2 packaged with bzr-explorer for Windows with the<br>
&gt; same &quot;big&quot; project I&#39;ve described here before.<br>
&gt;<br>
&gt; I have a shared repo at D:/VCS/bzrEval with main branch<br>
&gt; D:/VCS/bzrEval/trunk and I branch to D:/VCS/bzrEval/dev_d within the<br>
&gt; shared repo and I get the following message in .bzr.log (and in the<br>
&gt; bzr-explorer GUI):<br>
&gt;<br>
&gt; ImmortalLimbo: Unable to delete transform temporary directory<br>
&gt; D:/VCS/bzrEval/dev_d/.bzr/checkout/limbo.<br>
&gt;     Please examine D:/VCS/bzrEval/dev_d/.bzr/checkout/limbo to see if it<br>
&gt; contains any files you wish to<br>
&gt;     keep, and delete it when you are done.<br>
&gt;<br>
&gt; [Traceback is attached]<br>
&gt;<br>
&gt; It turns out that the limbo directory is empty.  But what would I have<br>
&gt; done if it had files in it?  I need to understand this well enough to be<br>
&gt; able to explain it to people who are just trying to get their (non-bzr)<br>
&gt; jobs done.<br>
&gt;<br>
<br>
</div>I have a strong suspicion you have a filesystem race condition, though I<br>
don&#39;t know *why*. Specifically, if you run bzr, get this error, and then<br>
look and find the directory empty, I would guess that for a brief moment<br>
after we issued a rename command, it didn&#39;t actually take affect before<br>
we issued the &#39;rmdir&#39; command.<br>
<br></blockquote><div><br>I did browse (with Windows Explorer) the limbo directories during the branch operation.  There were seven  directories matching the pattern new-\d.  I did not open any files.  I only opened directories and saw the catalogs.  After the branch operation completed (with the Limbo message), the limbo directory was empty.  Perhaps I created a race condition simply by having the directory catalogs open for reading?<br>
 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Is &#39;D:&#39; a mounted directory or is it a local disk? A mounted directory<br>
would be much more likely to experience a race condition.<br>
<br></blockquote><div><br>D: is a local disk.  <br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
If you really do have a race, one option internally is to just add a<br>
polling loop around the rmdir. So we try to delete it, get not-empty,<br>
wait a tick or two, then try again.<br>
<br></blockquote><div><br>Yeah.  I suspect you like that as much I do.  I admit I have written code like that for Windows.  I&#39;m not proud of it.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

I don&#39;t know if you are comfortable running bzr from source rather than<br>
from the installed copy. If you are, then we can pretty easily work up<br>
some patches that would at least make debugging this easier. (When we<br>
get a rmdir failure, just listdir() the directory, to see what is there.<br>
If *that* comes up empty, then your system is lying to us for some reason.)<br>
<br></blockquote><div><br>Sure.  I use to run bzr from source all the time, until you guys started getting good at packaging it.  :)  :)<br><br>I would be happy to try that out, but since my attempts to reproduce the observation have so far failed, I suggest that we hold off until I can reproduce it at least one-in-five times.<br>
 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Another possibility is some sort of race condition with Virus Scanners.<br>
They may lock a directory while they are looking at newly created<br>
content, and then after we&#39;ve moved all the content out, they haven&#39;t<br>
stopped searching that dir. (as an example.) Though honestly, I would<br>
expect that to cause problems moving files out of the directory, rather<br>
than problems deleting the directory.<br>
<br></blockquote><div><br>I agree.  I think we&#39;d have a lot of problems with bzr (and other tools) if our virus scanner were getting in the way.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<br>
And one further option. Switch to using lightweight checkouts and<br>
treeless branches. You&#39;ll likely be better served by this in the long<br>
run (since we don&#39;t have to recreate the whole tree content, just the<br>
few files which are actually different). But some of it will depend on<br>
your specific needs. (And yes, it doesn&#39;t solve the problem if you still<br>
experience the limbo issue on the first checkout.)<br>
<br></blockquote><div><br>We&#39;ve been avoiding lightweight checkouts, because we have times of day when our internal network is saturated anyway, which makes any operations which need the network problematic.  I know that&#39;s our problem and bzr can&#39;t do anything about it, but that&#39;s why we favor full branches.<br>
<br>Thanks, and i will try to reproduce the observation a few more times today and report back.<br><br>~M<br><br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<br>
John<br>
=:-&gt;<br>
-----BEGIN PGP SIGNATURE-----<br>
Version: GnuPG v1.4.9 (Cygwin)<br>
Comment: Using GnuPG with Mozilla - <a href="http://enigmail.mozdev.org/" target="_blank">http://enigmail.mozdev.org/</a><br>
<br>
iEYEARECAAYFAkxq1XgACgkQJdeBCYSNAANT0ACdEhpTHXQVQGndFxjcm0DVIihA<br>
5JkAn2Dx+Ez/G8FhXGj2YqXM/NWaC/+g<br>
=n48+<br>
-----END PGP SIGNATURE-----<br>
</blockquote></div><br>