<br><br><div><span class="gmail_quote">On 4/12/07, <b class="gmail_sendername">John Arbash Meinel</b> &lt;<a href="mailto:john@arbash-meinel.com">john@arbash-meinel.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
John Arbash Meinel has voted +0.<br>Status is now: Waiting<br>Comment:<br>This has come quite a ways, and I would really like to see it in 0.16.</blockquote><div><br>me too <br></div><br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
If you need some help, just ask, and I can try to do some of the things<br>I mention here</blockquote><div><br>I&#39;ll try my best to get it done..<br>&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I think this should have a NOTES WHEN UPGRADING: section in NEWS.<br>Because it means that &#39;bzr rm&#39; will change how it works.<br><br>I know there have been mention of people who are already using &#39;bzr rm&#39;<br>
and expecting it to leave the file alone (James Troup mentioned this for<br>versioning files in /etc). So we need to make sure to convey this change<br>well. (We aren&#39;t destroying the data, you can &#39;bzr revert&#39; or &#39;bzr rm
<br>--keep&#39;, but people need to know about it).</blockquote><div><br>Should I just put the whole thing in a the NOTES WHEN UPGRADING section ?<br></div><br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I don&#39;t quite understand this change:<br>-&nbsp;&nbsp;&nbsp;&nbsp;only &#39;added&#39; files will be removed.&nbsp;&nbsp;If you specify both, then new<br>files<br>-&nbsp;&nbsp;&nbsp;&nbsp;in the specified directories will be removed.&nbsp;&nbsp;If the directories<br>are<br>+&nbsp;&nbsp;&nbsp;&nbsp;only &#39;added&#39; files will be removed.&nbsp;&nbsp;If you specify both, then new
<br>+&nbsp;&nbsp;&nbsp;&nbsp;files in the specified directories will be removed.&nbsp;&nbsp;If the<br>directories are<br><br>It seems you re-wrapped the line, only to cause the next line to become<br>*too* long.</blockquote><div><br>[DONE]<br>&nbsp;</div><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">I&#39;m not sure about making these take multiple paths:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def failUnlessExists(self, path):
<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;Fail unless path, which may be abs or relative, exists.&quot;&quot;&quot;<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.failUnless(osutils.lexists(path),path+&quot; does not exist&quot;)<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;Fail unless path or paths, which may be abs or relative,
<br>exist.&quot;&quot;&quot;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not isinstance(path, basestring):<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for p in path:<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.failUnlessExists(p)<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else:<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.failUnless(osutils.lexists(path),path+&quot; does not
<br>exist&quot;)<br><br>I think we generally avoid apis that use &#39;isinstance&#39;. I&#39;m probably<br>about 75% okay on this, though. Since it is meant as a way to make<br>writing tests easier, and as long as the tests are easier to write and
<br>easier to understand, it seems good.</blockquote><div><br>I&#39;m leaving as is, unless someone is less than 50% ok with it.. :)&nbsp;</div><br><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I prefer &#39;self.run_bzr&#39; to &#39;self.runbzr&#39;, but that is more of a<br>guideline than a requirement.</blockquote><div><br>ok I&#39;ll convert to run_bzr_captured, <br>but &#39;self.runbzr&#39; seemed more suited to lazy people like me...
<br>[DONE]<br><br>* these tests follow this pattern:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (out, err) = self.run_bzr_captured([&#39;remove&#39;, &#39;--keep&#39;, &#39;a&#39;])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.assertEquals(out.strip(), &quot;&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.assertEquals
(err.strip(), &quot;removed a&quot;)<br>which we might want to do better:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.run_bzr_captured([&#39;remove&#39;, &#39;--keep&#39;, &#39;a&#39;], out_regex=&#39;&#39;, err_regex=&quot;removed a&quot;)<br>also can&#39;t I make it like runbzr, to auto expand a sting? 
<br>&nbsp; (your probably gona say no as you don&#39;t like isinstance magic :( <br><br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
PEP8 says that:<br>(out,err) = self.runbzr(<br>should be<br>(out, err) = self.</blockquote><div><br>[DONE]<br></div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
You added a test class to test_workingtree.py, but it should probably be<br>a test in workingtree_implementations/test_remove.py<br><br>+<br>+class TestRemove(TestCaseWithTransport):<br>+&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;Tests WorkingTree.remove
&quot;&quot;&quot;<br><br>It needs to be written slightly differently, first by inheriting from<br>TestCaseWithWorkingTree.<br><br>You can look at other &#39;workingtree_implementations&#39; tests to get a<br>reference for how to do it.
<br><br>Putting it in bzrlib/tests/test_workingtree.py means it will be tested<br>with our current default WT format. Putting it in<br>workingtree_implementations means it will get tested against all of our<br>WT implementations (currently WT2, WT3, WT4). The biggest benefit is
<br>that it adds tests for any new implementations, to make sure we maintain<br>interface consistency.</blockquote><div><br>[DONE]. all tests passed first time!<br>&nbsp;</div><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I don&#39;t see why you needed to do this:<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not tree.has_id(file_id):<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not tree.has_id(file_id) or not file_id in<br>tree.inventory:<br><br>If you found a case where &quot;tree.has_id
(file_id)&quot; was returning True, but<br>file_id not in tree.inventory, then you found a bug. And it should be<br>fixed at the &#39;has_id()&#39; layer.</blockquote><div><br>...mm thats weird.<br>I had to do this to make my tests pass, but I undid it now, and it works fine..
<br>I think at the time I did it, I used self.changes_from(..., specific_files=...),<br>wrong, since I didn&#39;t dereference them...<br><br>[REMOVED]<br>&nbsp;</div></div>...<br>I&#39;m still busy with the rest, but will get it done asap.
<br>