= Tips and Tricks for committers = This page provides some useful hints how to work with our infrastructure. And they can also make your work a lot easier. == Set svn properties automatically on new Portfiles == In the configuration for your Subversion client, enable automatic property setting and, for all files named Portfile, setting "svn:eol-style" to "native" and "svn:keywords" to "Id". If you are not using Subversion's own svn command-line client, see its documentation. For svn, you can make the appropriate changes by editing `~/.subversion/config` as follows: {{{ ... [miscellany] enable-auto-props = yes ... [auto-props] Portfile = svn:eol-style=native;svn:keywords=Id }}} == Apply patches directly from Trac URL == === Installation === Add the following functions to your `.bashrc` in order to apply patches directly from Trac. {{{ function trac-get { local url=$1 local dir=$2 if [[ -z $dir ]]; then dir=. fi curl "$url?format=raw" --create-dirs -o $dir/$(basename $1) } function trac-patch { local cmd="" while [[ $1 == -* ]]; do if [[ "$1" == "--" ]]; then break fi cmd="$cmd $1" shift done if [[ -z $cmd ]]; then cmd="-p0" fi trac-get $1 patch $cmd < $(basename $1) } }}} === Usage === Use like this: 1. Copy the URL to the patch from the Trac ticket page 1. Switch to the ports directory {{{ $ cd $(port dir foo) }}} 1. Apply the patch {{{ $ trac-patch http://trac.macports.org/attachment/ticket/.../Portfile.diff }}} You can also add options to `trac-patch` which will get passed through to the patch tool. This is especially useful when the patch needs another prefix level. {{{ $ trac-patch -p1 http://trac.macports.org/attachment/ticket/.../Portfile.diff }}} If you don't add any option, `-p0` is used as a default. This should be the most common case. `trac-get` can also download to another directory. If the directory does not yet exist, it will be created. Just add a second parameter with the name of the directory. If you omit the second parameter, the current directory is used. {{{ $ trac-get http://trac.macports.org/attachment/ticket/.../Portfile new-port }}} == Do Explorative Programming in tclsh with Readline Support == tclsh does not offer readline support by itself, which is quite annoying. When writing portfiles or tinkering with changes to Macports base, I need to experiment in a Tcl shell all the time to tests small things. But for that, command history and Emacs-like navigation within the line are essential. Unfortunately tclsh does not offer this. Solution: use port {{{rlwrap}}} together with tclsh. When you invoke tclsh via rlwrap you get all the convenience you know from bash. {{{ rlwrap tclsh }}} Or, put even an alias into ~/.bashrc {{{ alias tclsh='rlwrap tclsh' }}} and don't think about it ever again. == Syntax Coloring When Editing Portfiles with Text Editors == See [BbeditLanguageModule this page] for setting up BBEdit or TextWrangler to have a MacPorts Language Module