Call for Help: need script for patching ports tree, building with poudriere

Torsten Zuehlsdorff mailinglists at
Mon Nov 23 15:14:25 UTC 2015

Hello Ricky,

>> Thank you very much for your script!
>> I took a short look at it and have some questions/suggestions:
>> Line 119/120: There you're burning an if. I have more skill in bash
>> than in sh - but is there no negation possible?
> Honestly, the main reason I started this is to just see what I could
> do. Feedback is most appreciated as improving my skills is one of my
> goals here. Bash and sh are extremely similar, this is most likely
> lack of knowledge on my part. Do you mind explaining further?

That is a good attitude :) I am doing this also just to get in touch 
with something new and learn.
As a professional trainer there is a trick in learning: whenever a 
question arises - by yourself or by another person: take the chance and 
look for it. So you will remember the answer much better. :)
If you need a programming-mentor for this project feel free to contact 
me off-list.

To answer my own question, yes there is

You wrote:

if [ -d "${PORTSDIR}" ]; then

Which directly skips the if condition without doing something.

Rewrite it with:

if ! [ -d "${PORTSDIR}" ]; then

This will test if the dir is non existent - exactly what you want! :)

>> Line 162: BUILD_LIST="`(cat ${PATCH_FILE} | grep -o '^Index:[ ].*'
>> | sed 's/Index: // ; s/Mk.*// ; s/Tools.*// ; s/Templates.*// ;
>> s/Keywords.*//' | grep -o -e '.*\/.*\/' | sed 's/.*\/.*\/files\/$//
>> ; s/\/$//' | sort | awk '!a[$0]++')`"
>> This line is relative complicated. Is there any reason not to let
>> svn do the work? Like: BUILD_LIST="`${SVN} status | grep -o -e
>> '.*\/.*\/' | awk '{ print $2 }'`> Your way is faster (and more
>> accurate, since i'm currently too short on time), but the other way
>> would allow applying multiple patches and manual changes without
>> any problems. But i'm not sure if this is really needed.
> Using the diff file instead of svn is of course faster because there
> has much less data to go through. I was considering adding multiple
> diff support. Going to take a closer look at this. Do you think its
> more important to focus on the diff file or the port tree for
> generating a build list?

That is a hard question. I asked for svn because i am from Germany and 
facing often problems with umlauts. My lastname is "Zühlsdorff" but i 
rewrite it for non-german person and programs to "Zuehlsdorff". Sounds 
the same, means the same.

Back to the core of the question: encoding problems.

Can you guarantee that cat and sed work correctly on files with for 
example an "ü" or containing something like '合気道'? ;)

Using svn avoids this problem, because in the portstree you could not 
find filenames with such characters.

An additional though: you are assuming that everything is fine with the 
input. It accepts all tracks of my music folder without any hestination 
as a patch-file. ;) Okay, patching fails - but i tries hard and the new 
versions provides much binary trash through the "cat" after failing.

I don't believe we must make it bullet proof. Here we need some input 
from Craig about the way and environment the script will be used in.

> The main reason I didn't want to use the
> port tree, at least in my case, is because I have so many ports that
> are not sync'd with the current FreeBSD tree.

Okay, but therefore you added the PORTSDIR variable?

>> Line 201: svn revert -R would do the same, both of our approaches
>> have a problem: the ignore for example added files.
> Yeah, I agree. This is a big problem with added patchfiles. I added a
> "Hard Revert" (-R) option that I was considering making make the
> default that should fix this problem. Can you check and see if it
> does for you?

I will check this.

> I know some people maybe weary of the rm -rf command,
> It is also why I added so many checks on a properly set port tree. Do
> you think it would be better to just do this "Hard Revert" and remove
> the other option? Thanks for the feedback!

The revert option should do what they say: reverting. The technical 
details are the second step. As a rule of thumb: do not lie. When you 
claim to revert do this. If this needs an rm than do the rm.

> I'v already started
> working on 0.0.2! I just finished adding better failed patch output.
> Going to also add a option to override the scripts portsdir, and add
> support for multiple diff files, and take another look at my
> BUILD_LIST to make it simpler. Keep the feed back coming please! =]

That are great news :)

One last question: is there any reason you choose this license? The 
FreeBSD license contains just the first 2 paragraphs which makes 
redistribution much easier. Especially paragraph 3 makes you script for 
example incompatible with the GNU licensed programs.


More information about the freebsd-testing mailing list