<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/3.26.0">
</HEAD>
<BODY>
On Fri, 2010-09-17 at 17:24 -0400, Trevor Woerner wrote:
<BLOCKQUOTE TYPE=CITE>
<PRE>
I like what I think you are suggesting. Are you suggesting you'd like
to see a patch where 
I add the functionality xcmd.sh into the existing build.sh? 
</PRE>
</BLOCKQUOTE>
Not the implementation, just the interface. <BR>
You used the concept of interface/implementation separation when xcdm used build.sh to get a list of modules. The user interface for the cloning task is on xcmd, but xcmd could not do all the job on its own. It delegated work (implementation) to build.sh without user intervention or awareness.<BR>
<BR>
Just turn the table around. Let build.sh contain all the user interface (options) to perform all tasks, cloning, building, you name it. The build.sh cannot do all the work so it delegates the git commands to xcmd, it's git &quot;backend&quot;. Both cloning and building appear to the user as being done by build.sh. That's a single point of service to the user. He does not have to repeat information twice (see my comment below). <BR>
<BR>
I have seen this pattern with xmlto, for example. It uses various backends (html, pdf, etc...) to convert the xml format into pdf, html, etc...&nbsp; It saves you from learning one command with their options for each output format. <BR>
<BR>
Another way to put it, what I propose is that xcmd and build.sh are not siblings, but build.sh is parent and xcmd is child, a background worker. The user plays around with build.sh, and never sees xcmd. So xcmd could be renamed (with a matching change in build.sh) and nobody would notice. That gives you, the implementor a lot of freedom to change the background worker without affecting the public interface.<BR>
<BR>
When you add new features to build.sh, you add an option (say --xserver=v1.9) to build.sh. That's all the user sees. It could be implemented in build.sh, xcdm or whatever script you want. The user does not care.<BR>
<BR>
<BLOCKQUOTE TYPE=CITE>
<PRE>
If so I'll give that a whirl otherwise I'll need to re-read
your emails more carefully :-)

On Fri, Sep 17, 2010 at 4:17 PM, Gaetan Nadon &lt;<A HREF="mailto:memsize@videotron.ca">memsize@videotron.ca</A>&gt; wrote:
&gt; &nbsp;&nbsp;&nbsp; echo &quot;&nbsp;&nbsp;&nbsp; -k|--keep-going&nbsp;&nbsp; continue with next module despite failure&quot;
&gt;
&gt; User has to tell the scripts twice the same information.

I'm not sure I understand your suggestion here. In my help notation
I'm giving the user the choice of using either a &quot;-k&quot; option or a
&quot;--keep-going&quot; option both of which do the exact same thing. This is
exactly what &quot;make&quot; accepts as options. build.sh has a &quot;-n&quot; option
which is equivalent. I chose &quot;-k | --keep-going&quot; to keep it similar to
&quot;make&quot;. But you don't have to specify both the &quot;-k&quot; and &quot;--keep-going&quot;
options (you could, if you wanted to, but either one by itself would
be fine).
</PRE>
</BLOCKQUOTE>
I meant that for a single task, e.g building from scratch,&nbsp; a user has to tell xcmd &quot;keep going in case of errors&quot;&nbsp; and has to tell build.sh &quot;keep going in case of errors&quot;. This is providing the same information twice, one to xcmd and one to build.sh. You might say it's normal because there are 2 scripts and I would say that's exactly the problem. One task, 2 scripts.<BR>
<BR>
Thanks again for listening!<BR>
<BR>
That would be the marketing statement for your proposal:<BR>
&quot;Separate build and repository functions while keeping a single easy to use interface&quot;<BR>
<BR>
<BR>
<BR>
<BR>
<BR>
</BODY>
</HTML>