Some quick responses, before I dig into this...<br><br><div class="gmail_quote">On Sun, Jun 8, 2008 at 4:08 AM, Marco Pesenti Gritti &lt;<a href="mailto:mpgritti@gmail.com">mpgritti@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">-import subprocess<br>
+from subprocess import Popen, PIPE<br>
&nbsp;import re<br>
&nbsp;import gettext<br>
&nbsp;from optparse import OptionParser<br>
+import warnings<br>
+import subprocess<br>
<br>
</div>warnings seem unused, doesn&#39;t pylint warn you about it?</blockquote><div><br>Brain fart. I read pylint output, said &quot;OK, there are warnings about unused imports, but which unused imports?&quot; :)&nbsp; Actually, this is fixed in later patches I sent. Will fix.<br>
&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Since you are importing subprocess just use that for Popen and PIPE.<br>
<div class="Ih2E3d"><br>
+from sugar.bundle.activitybundle import ActivityBundle, MANIFEST, list_files<br>
<br>
</div>It doesn&#39;t make sense for activitybundle to expose something a generic<br>
as list_files, especially since you are just using it to walk files<br>
inside that module.<br>
</blockquote><div><br>So I should duplicate the code of list_files? (This is my biggest question with your response)<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
I think the MANIFEST definition is overkill and you are using it<br>
inconsistently anyway. Just use the string.</blockquote><div><br>As the number of metadata files in the activity format grows, it seems likely that eventually we&#39;ll give them their own directory. Making this a global now is the first step to being able to change it later. But if you prefer, I&#39;ll use a string for now.<br>
<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<br>
+ &nbsp; &nbsp;def __init__(self, bundle_name, source_dir=None, dist_dir = None,<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dist_name = None):<br>
<br>
As I explained in my previous mail, I want to keep passing in the<br>
config here. Please remove the extra params.</blockquote><div><br>disagree a bit, but will do.<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<br>
+ &nbsp; &nbsp;def fix_manifest(self):<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;allfiles = &nbsp;list_files(self.config.source_dir,<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ignore_dirs=[&#39;dist&#39;, &#39;.git&#39;],<br>
<div class="Ih2E3d">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ignore_files=[&#39;.gitignore&#39;, &#39;MANIFEST&#39;,<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;*.pyc&#39;, &#39;*~&#39;, &#39;*.bak&#39;])<br>
</div>+ &nbsp; &nbsp; &nbsp; &nbsp;for afile in allfiles:<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if afile not in self.config.bundle.manifest:<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.config.bundle.manifest.append(afile)<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;manifestfile = open(os.path.join(self.config.source_dir,<br>
<div class="Ih2E3d">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MANIFEST),<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot;wb&quot;)<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;for line in self.config.bundle.manifest:<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;manifestfile.write(line + &quot;\n&quot;)<br>
<br>
</div>This is all really hard to read. Some suggestions:<br>
<br>
* Split the ignore lists out of the list_files call.<br>
* We are never using aX for list iteration in the code. Just use f or<br>
filename there.<br>
* Do a manifest = self.config.bundle.manifest, you are repeating it 3 times<br>
* s/manifestfile/manifest so that it feet in one line and you don&#39;t<br>
need the crazy split up.<br>
* Add a \n after &quot;manifestfile = open...&quot;</blockquote><div><br>will do<br>&nbsp;<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
<div class="Ih2E3d"><br>
 &nbsp; &nbsp; def get_files(self):<br>
- &nbsp; &nbsp; &nbsp; &nbsp;return list_files(self.config.source_dir,<br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ignore_dirs=[&#39;locale&#39;, &#39;dist&#39;, &#39;.git&#39;],<br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ignore_files=[&#39;.gitignore&#39;])<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;git_ls = Popen(&#39;git-ls-files&#39;, stdout=PIPE, cwd=self.config.source_dir)<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;if git_ls.wait():<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;#non-0 return code - failed<br>
</div>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return BuildPackager.get_files(self)<br>
<div class="Ih2E3d">+ &nbsp; &nbsp; &nbsp; &nbsp;f = git_ls.stdout<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;files = []<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;for line in f.readlines():<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;filename = line.strip()<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if not filename.startswith(&#39;.&#39;):<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;files.append(filename)<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;f.close()<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;return files<br>
<br>
</div>Please separate groups of code with \n to make it more readable. I<br>
don&#39;t think this comment is necessary &quot;#non-0 return code - failed&quot;,<br>
it&#39;s obvious if you ever used Popen.<br>
</blockquote><div><br>will do<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
+ &nbsp; &nbsp; &nbsp; &nbsp;from sugar import activity<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;from sugar import env<br>
<br>
Unless you have a concrete need for this please drop it from the<br>
patch. To fix it properly I think we need to really cleanup the<br>
dependencies. But that&#39;s another patch.<br>
</blockquote><div><br>will do<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
+ &nbsp; &nbsp;def _is_dir(self, filename):<br>
+ &nbsp; &nbsp;def _is_file(self, filename):<br>
<br>
As you did in your last patch remove the _<br>
</blockquote><div><br>will do<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
+ &nbsp; &nbsp;def install(self):<br>
<br>
I don&#39;t think installation should be expose by ActivityBundle, we need<br>
to cleanup the dependencies. Let&#39;s remove it from this patch and we<br>
can discuss how to do it properly<br>
</blockquote><div><br>install was already exposed, I just refactored unpack out of it (and thus also exposed unpack). This only showed up in the patch because I put unpack first, and the body of unpack matched with that part of the body of install. I&#39;m pretty sure this function is used by Journal, we can&#39;t just drop it.<br>
&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
+ &nbsp; &nbsp; &nbsp; &nbsp;try:<br>
<div class="Ih2E3d">+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;f = self._get_file(MANIFEST)<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;except IOError:<br>
</div>+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;f = None<br>
+ &nbsp; &nbsp; &nbsp; &nbsp;if not f:<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;logging.warning(&quot;Activity directory lacks a MANIFEST file.&quot;)<br>
+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return []<br>
<br>
All the other code which uses _get_file, assumes it will just return<br>
None if there is an IOError. Seems easier to just change the method to<br>
really do so (if it doesn&#39;t already).</blockquote><div><br>Will do.<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
<div class="Ih2E3d"><br>
+ &nbsp; &nbsp; &nbsp; &nbsp;#strip trailing \n and other whitespace<br>
<br>
</div>I think this comment is unnecessary, it&#39;s implicit in the definition<br>
of the strip function.<br>
</blockquote><div><br>Will do.<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
I have some more comments for the read_manifest implementation (as a<br>
start some \n will help readability), but I have to run out now. We<br>
can address those in the next iteration.<br>
</blockquote><div><br>I&#39;ll start with the \n.<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Thanks!<br>
<div><div></div><div class="Wj3C7c">Marco<br>
_______________________________________________<br>
Sugar mailing list<br>
<a href="mailto:Sugar@lists.laptop.org">Sugar@lists.laptop.org</a><br>
<a href="http://lists.laptop.org/listinfo/sugar" target="_blank">http://lists.laptop.org/listinfo/sugar</a><br>
</div></div></blockquote></div><br>