<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[124236] branches/gsoc14-interactive/base</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="https://trac.macports.org/changeset/124236">124236</a></dd>
<dt>Author</dt> <dd>shasha@macports.org</dd>
<dt>Date</dt> <dd>2014-08-21 10:47:06 -0700 (Thu, 21 Aug 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Merge from trunk</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#branchesgsoc14interactivebaseChangeLog">branches/gsoc14-interactive/base/ChangeLog</a></li>
<li><a href="#branchesgsoc14interactivebasedocMakefilein">branches/gsoc14-interactive/base/doc/Makefile.in</a></li>
<li><a href="#branchesgsoc14interactivebasedocasciidocconf">branches/gsoc14-interactive/base/doc/asciidoc.conf</a></li>
<li><a href="#branchesgsoc14interactivebasedocportactivate1">branches/gsoc14-interactive/base/doc/port-activate.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportactivate1txt">branches/gsoc14-interactive/base/doc/port-activate.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportarchivefetch1">branches/gsoc14-interactive/base/doc/port-archivefetch.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportarchivefetch1txt">branches/gsoc14-interactive/base/doc/port-archivefetch.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportcd1">branches/gsoc14-interactive/base/doc/port-cd.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportcd1txt">branches/gsoc14-interactive/base/doc/port-cd.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportcontents1">branches/gsoc14-interactive/base/doc/port-contents.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportcontents1txt">branches/gsoc14-interactive/base/doc/port-contents.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportdependents1">branches/gsoc14-interactive/base/doc/port-dependents.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportdependents1txt">branches/gsoc14-interactive/base/doc/port-dependents.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportedit1">branches/gsoc14-interactive/base/doc/port-edit.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportedit1txt">branches/gsoc14-interactive/base/doc/port-edit.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportrevupgrade1">branches/gsoc14-interactive/base/doc/port-rev-upgrade.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportrevupgrade1txt">branches/gsoc14-interactive/base/doc/port-rev-upgrade.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportselfupdate1">branches/gsoc14-interactive/base/doc/port-selfupdate.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportselfupdate1txt">branches/gsoc14-interactive/base/doc/port-selfupdate.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportuninstall1">branches/gsoc14-interactive/base/doc/port-uninstall.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportuninstall1txt">branches/gsoc14-interactive/base/doc/port-uninstall.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasesrcdarwintracelib10darwintracec">branches/gsoc14-interactive/base/src/darwintracelib1.0/darwintrace.c</a></li>
<li><a href="#branchesgsoc14interactivebasesrcdarwintracelib10procc">branches/gsoc14-interactive/base/src/darwintracelib1.0/proc.c</a></li>
<li><a href="#branchesgsoc14interactivebasesrcmacports10Makefilein">branches/gsoc14-interactive/base/src/macports1.0/Makefile.in</a></li>
<li><a href="#branchesgsoc14interactivebasesrcmacports10macportstcl">branches/gsoc14-interactive/base/src/macports1.0/macports.tcl</a></li>
<li><a href="#branchesgsoc14interactivebasesrcpextlib10Makefilein">branches/gsoc14-interactive/base/src/pextlib1.0/Makefile.in</a></li>
<li><a href="#branchesgsoc14interactivebasesrcpextlib10tracelibc">branches/gsoc14-interactive/base/src/pextlib1.0/tracelib.c</a></li>
<li><a href="#branchesgsoc14interactivebasesrcportporttcl">branches/gsoc14-interactive/base/src/port/port.tcl</a></li>
<li><a href="#branchesgsoc14interactivebasesrcport10portfetchtcl">branches/gsoc14-interactive/base/src/port1.0/portfetch.tcl</a></li>
<li><a href="#branchesgsoc14interactivebasesrcport10porttracetcl">branches/gsoc14-interactive/base/src/port1.0/porttrace.tcl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#branchesgsoc14interactivebasedocportdir1">branches/gsoc14-interactive/base/doc/port-dir.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportdir1txt">branches/gsoc14-interactive/base/doc/port-dir.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportdistcheck1">branches/gsoc14-interactive/base/doc/port-distcheck.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportdistcheck1txt">branches/gsoc14-interactive/base/doc/port-distcheck.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportdistfiles1">branches/gsoc14-interactive/base/doc/port-distfiles.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportdistfiles1txt">branches/gsoc14-interactive/base/doc/port-distfiles.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportdmg1">branches/gsoc14-interactive/base/doc/port-dmg.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportdmg1txt">branches/gsoc14-interactive/base/doc/port-dmg.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportdoctor1">branches/gsoc14-interactive/base/doc/port-doctor.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportdoctor1txt">branches/gsoc14-interactive/base/doc/port-doctor.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportecho1">branches/gsoc14-interactive/base/doc/port-echo.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportecho1txt">branches/gsoc14-interactive/base/doc/port-echo.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportexit1">branches/gsoc14-interactive/base/doc/port-exit.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportexit1txt">branches/gsoc14-interactive/base/doc/port-exit.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportfile1">branches/gsoc14-interactive/base/doc/port-file.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportfile1soelim">branches/gsoc14-interactive/base/doc/port-file.1.soelim</a></li>
<li><a href="#branchesgsoc14interactivebasedocportgohome1">branches/gsoc14-interactive/base/doc/port-gohome.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportgohome1txt">branches/gsoc14-interactive/base/doc/port-gohome.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportinfo1">branches/gsoc14-interactive/base/doc/port-info.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportinfo1txt">branches/gsoc14-interactive/base/doc/port-info.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportinstalled1">branches/gsoc14-interactive/base/doc/port-installed.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportinstalled1txt">branches/gsoc14-interactive/base/doc/port-installed.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportlint1">branches/gsoc14-interactive/base/doc/port-lint.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportlint1txt">branches/gsoc14-interactive/base/doc/port-lint.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportlist1">branches/gsoc14-interactive/base/doc/port-list.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportlist1txt">branches/gsoc14-interactive/base/doc/port-list.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportlivecheck1">branches/gsoc14-interactive/base/doc/port-livecheck.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportlivecheck1txt">branches/gsoc14-interactive/base/doc/port-livecheck.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocportlocation1">branches/gsoc14-interactive/base/doc/port-location.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportlocation1soelim">branches/gsoc14-interactive/base/doc/port-location.1.soelim</a></li>
<li><a href="#branchesgsoc14interactivebasedocportmdmg1">branches/gsoc14-interactive/base/doc/port-mdmg.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportmdmg1soelim">branches/gsoc14-interactive/base/doc/port-mdmg.1.soelim</a></li>
<li><a href="#branchesgsoc14interactivebasedocportmpkg1">branches/gsoc14-interactive/base/doc/port-mpkg.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportmpkg1soelim">branches/gsoc14-interactive/base/doc/port-mpkg.1.soelim</a></li>
<li><a href="#branchesgsoc14interactivebasedocportpkg1">branches/gsoc14-interactive/base/doc/port-pkg.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportpkg1soelim">branches/gsoc14-interactive/base/doc/port-pkg.1.soelim</a></li>
<li><a href="#branchesgsoc14interactivebasedocportquit1">branches/gsoc14-interactive/base/doc/port-quit.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportquit1soelim">branches/gsoc14-interactive/base/doc/port-quit.1.soelim</a></li>
<li><a href="#branchesgsoc14interactivebasedocportrdependents1">branches/gsoc14-interactive/base/doc/port-rdependents.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportrdependents1soelim">branches/gsoc14-interactive/base/doc/port-rdependents.1.soelim</a></li>
<li><a href="#branchesgsoc14interactivebasedocportreclaim1">branches/gsoc14-interactive/base/doc/port-reclaim.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportreclaim1txt">branches/gsoc14-interactive/base/doc/port-reclaim.1.txt</a></li>
<li><a href="#branchesgsoc14interactivebasedocporturl1">branches/gsoc14-interactive/base/doc/port-url.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocporturl1soelim">branches/gsoc14-interactive/base/doc/port-url.1.soelim</a></li>
<li><a href="#branchesgsoc14interactivebasedocportwork1">branches/gsoc14-interactive/base/doc/port-work.1</a></li>
<li><a href="#branchesgsoc14interactivebasedocportwork1soelim">branches/gsoc14-interactive/base/doc/port-work.1.soelim</a></li>
<li><a href="#branchesgsoc14interactivebasesrcdarwintracelib10sandbox_actionsh">branches/gsoc14-interactive/base/src/darwintracelib1.0/sandbox_actions.h</a></li>
<li><a href="#branchesgsoc14interactivebasesrcmacports10doctortcl">branches/gsoc14-interactive/base/src/macports1.0/doctor.tcl</a></li>
<li><a href="#branchesgsoc14interactivebasesrcmacports10reclaimtcl">branches/gsoc14-interactive/base/src/macports1.0/reclaim.tcl</a></li>
<li><a href="#branchesgsoc14interactivebasesrcmacports10testsreclaimtest">branches/gsoc14-interactive/base/src/macports1.0/tests/reclaim.test</a></li>
</ul>

<h3>Property Changed</h3>
<ul>
<li><a href="#branchesgsoc14interactivebase">branches/gsoc14-interactive/base/</a></li>
<li><a href="#branchesgsoc14interactivebasesrcpextlib10Makefilein">branches/gsoc14-interactive/base/src/pextlib1.0/Makefile.in</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="branchesgsoc14interactivebase"></a>
<div class="propset"><h4>Property changes: branches/gsoc14-interactive/base</h4>
<pre class="diff"><span>
</span></pre></div>
<a id="svnmergeinfo"></a>
<div class="modfile"><h4>Modified: svn:mergeinfo</h4></div>
<span class="cx">/branches/gsoc09-logging/base:51231-60371
</span><span class="cx">/branches/gsoc11-rev-upgrade/base:78828-88375
</span><span class="cx">/branches/gsoc11-statistics/base:79520,79666
</span><span class="cx">/branches/gsoc13-tests:106692-111324
</span><span class="cx">/branches/universal-sanity/base:51872-52323
</span><span class="cx">/branches/variant-descs-14482/base:34469-34855,34900-37508,37511-37512,41040-41463,42575-42626,42640-42659
</span><span class="cx">/trunk/base:119514-123795
</span><span class="cx">/users/perry/base-bugs_and_notes:45682-46060
</span><span class="cx">/users/perry/base-select:44044-44692
</span><span class="cx">   + /branches/gsoc08-privileges/base:37343-46937
</span><span class="cx">/branches/gsoc09-logging/base:51231-60371
</span><span class="cx">/branches/gsoc11-rev-upgrade/base:78828-88375
</span><span class="cx">/branches/gsoc11-statistics/base:79520,79666
</span><span class="cx">/branches/gsoc13-tests:106692-111324
</span><span class="cx">/branches/gsoc14-cleanup:123738-124046
</span><span class="cx">/branches/universal-sanity/base:51872-52323
</span><span class="cx">/branches/variant-descs-14482/base:34469-34855,34900-37508,37511-37512,41040-41463,42575-42626,42640-42659
</span><span class="cx">/trunk/base:119514-124235
</span><span class="cx">/users/perry/base-bugs_and_notes:45682-46060
</span><span class="cx">/users/perry/base-select:44044-44692
</span><a id="branchesgsoc14interactivebaseChangeLog"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/ChangeLog (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/ChangeLog        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/ChangeLog        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -4,6 +4,10 @@
</span><span class="cx"> ###
</span><span class="cx"> 
</span><span class="cx"> Release 2.4 (unreleased)
</span><ins>+    - Fix bugs in trace mode that caused it to (1) not ignore /usr/local as
+      it should and (2) fail with certain lengths of $prefix.
+      (cal in r124145, r124146)
+
</ins><span class="cx">     - Display notes for installed or updated ports at the end of the
</span><span class="cx">       installation to prevent them from getting lost in the scrolling output.
</span><span class="cx">       (#24507, cal in r118304, patch by snc)
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocMakefilein"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/Makefile.in (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/Makefile.in        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/Makefile.in        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -8,8 +8,9 @@
</span><span class="cx"> ASCIIDOC=
</span><span class="cx"> XSLTPROC=
</span><span class="cx"> else
</span><del>-ASCIIDOC=        $(wildcard ${prefix}/bin/asciidoc)
-XSLTPROC=        $(wildcard ${prefix}/bin/xsltproc)
</del><ins>+ASCIIDOC=    $(wildcard ${prefix}/bin/asciidoc)
+XSLTPROC=    $(wildcard ${prefix}/bin/xsltproc)
+DOCBOOK_XSL= $(wildcard ${prefix}/share/xsl/docbook-xsl/manpages/docbook.xsl)
</ins><span class="cx"> endif
</span><span class="cx"> 
</span><span class="cx"> ASCIIDOCFLAGS=        -f asciidoc.conf -a manversion=${MACPORTS_VERSION}
</span><span class="lines">@@ -30,16 +31,39 @@
</span><span class="cx">                 port-dependents.1 \
</span><span class="cx">                 port-deps.1 \
</span><span class="cx">                 port-destroot.1 \
</span><ins>+                port-dir.1 \
+                port-distcheck.1 \
+                port-distfiles.1 \
+                port-dmg.1 \
+        port-doctor.1 \
+                port-echo.1 \
</ins><span class="cx">                 port-edit.1 \
</span><ins>+                port-exit.1 \
</ins><span class="cx">                 port-extract.1 \
</span><span class="cx">                 port-fetch.1 \
</span><ins>+                port-file.1 \
+                port-gohome.1 \
</ins><span class="cx">                 port-help.1 \
</span><ins>+                port-info.1 \
</ins><span class="cx">                 port-install.1 \
</span><ins>+                port-installed.1 \
+                port-lint.1 \
+                port-list.1 \
+                port-livecheck.1 \
+                port-location.1 \
+                port-mdmg.1 \
+                port-mpkg.1 \
</ins><span class="cx">                 port-patch.1 \
</span><ins>+                port-pkg.1 \
+                port-quit.1 \
+                port-rdependents.1 \
</ins><span class="cx">                 port-rdeps.1 \
</span><ins>+        port-reclaim.1 \
</ins><span class="cx">                 port-rev-upgrade.1 \
</span><span class="cx">                 port-selfupdate.1 \
</span><span class="cx">                 port-uninstall.1 \
</span><ins>+                port-url.1 \
+                port-work.1 \
</ins><span class="cx">                 port.1 \
</span><span class="cx"> 
</span><span class="cx"> MAN5=                macports.conf.5
</span><span class="lines">@@ -105,7 +129,7 @@
</span><span class="cx">         ln -sf $(shell basename $$(awk '{print $$2}' &lt; $&lt;)).html $@
</span><span class="cx"> 
</span><span class="cx"> # Define these rules only if both asciidoc and xsltproc are available
</span><del>-ifneq ($(and $(ASCIIDOC),$(XSLTPROC)),)
</del><ins>+ifneq ($(and $(ASCIIDOC),$(XSLTPROC),$(DOCBOOK_XSL)),)
</ins><span class="cx"> %: %.xml manpage.xsl
</span><span class="cx">         $(XSLTPROC) $(XSLTFLAGS) manpage.xsl $&lt;
</span><span class="cx"> 
</span><span class="lines">@@ -117,13 +141,13 @@
</span><span class="cx"> else
</span><span class="cx"> man: ${MAN} ${MAN:%=%.gz}
</span><span class="cx">         @echo &quot;* Warning: Using pre-generated man pages only.&quot;
</span><del>-        @echo &quot;* asciidoc and xsltproc are required to generate man pages from source.&quot;
</del><ins>+        @echo &quot;* asciidoc, xsltproc (port libxslt) and docbook-xsl are required to generate man pages from source.&quot;
</ins><span class="cx"> 
</span><span class="cx"> %.xml %.html: | %.txt
</span><span class="cx">         @echo &quot;* In order to modify and generate output from these source files,&quot;
</span><del>-        @echo &quot;* please install asciidoc and xsltproc or use&quot;
-        @echo &quot;*   $(MAKE) ASCIIDOC=.../bin/asciidoc XSLTPROC=../bin/xsltproc&quot;
-        @echo &quot;* with appropriate paths.&quot;
</del><ins>+        @echo &quot;* please install asciidoc and xsltproc (port libxslt) and docbook-xsl or use&quot;
+        @echo &quot;*   $(MAKE) ASCIIDOC=.../bin/asciidoc XSLTPROC=../bin/xsltproc DOCBOOK_XSL=nonempty&quot;
+        @echo &quot;* with appropriate paths for asciidoc and xsltproc.&quot;
</ins><span class="cx">         @exit 1
</span><span class="cx"> endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocasciidocconf"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/asciidoc.conf (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/asciidoc.conf        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/asciidoc.conf        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -4,6 +4,7 @@
</span><span class="cx"> manmanual=MacPorts Manual
</span><span class="cx"> guideurl=http://guide.macports.org/
</span><span class="cx"> wikiurl=https://trac.macports.org/wiki/
</span><ins>+sourceurl=https://trac.macports.org/browser/
</ins><span class="cx"> 
</span><span class="cx"> ## man: macro
</span><span class="cx"> #
</span><span class="lines">@@ -18,6 +19,7 @@
</span><span class="cx"> (?su)[\\]?(?P&lt;name&gt;man):(?P&lt;target&gt;\S*?)\[(?P&lt;attrlist&gt;.*?)\]=
</span><span class="cx"> (?su)[\\]?(?P&lt;name&gt;guide):(?P&lt;target&gt;\S*?)\[(?P&lt;attrlist&gt;.*?)\]=
</span><span class="cx"> (?su)[\\]?(?P&lt;name&gt;wiki):(?P&lt;target&gt;\S*?)\[(?P&lt;attrlist&gt;.*?)\]=
</span><ins>+(?su)[\\]?(?P&lt;name&gt;source):(?P&lt;target&gt;\S*?)\[(?P&lt;attrlist&gt;.*?)\]=
</ins><span class="cx"> 
</span><span class="cx"> # man: and guide: for docbook
</span><span class="cx"> ifdef::backend-docbook[]
</span><span class="lines">@@ -26,9 +28,11 @@
</span><span class="cx">     &lt;refentrytitle&gt;{target}&lt;/refentrytitle&gt;{0?&lt;manvolnum&gt;{0}&lt;/manvolnum&gt;}
</span><span class="cx"> &lt;/citerefentry&gt;
</span><span class="cx"> [guide-inlinemacro]
</span><del>-&lt;ulink url=&quot;{guideurl}#{target}&quot;&gt;{0={guideurl}{target}}&lt;/ulink&gt;
</del><ins>+&lt;ulink url=&quot;{guideurl}#{target}&quot;&gt;{0={guideurl}#{target}}&lt;/ulink&gt;
</ins><span class="cx"> [wiki-inlinemacro]
</span><span class="cx"> &lt;ulink url=&quot;{wikiurl}{target}&quot;&gt;{0={target}}&lt;/ulink&gt;
</span><ins>+[source-inlinemacro]
+&lt;ulink url=&quot;{sourceurl}{target}&quot;&gt;{0={target}}&lt;/ulink&gt;
</ins><span class="cx"> endif::backend-docbook[]
</span><span class="cx"> 
</span><span class="cx"> # man: and guide: for xhtml11
</span><span class="lines">@@ -36,9 +40,11 @@
</span><span class="cx"> [man-inlinemacro]
</span><span class="cx"> &lt;a href=&quot;{target}{0?.{0}}.html&quot;&gt;{target}{0?({0})}&lt;/a&gt;
</span><span class="cx"> [guide-inlinemacro]
</span><del>-&lt;a href=&quot;{guideurl}#{target}&quot;&gt;{0={guideurl}{target}}&lt;/a&gt;
</del><ins>+&lt;a href=&quot;{guideurl}#{target}&quot;&gt;{0={guideurl}#{target}}&lt;/a&gt;
</ins><span class="cx"> [wiki-inlinemacro]
</span><span class="cx"> &lt;a href=&quot;{wikiurl}{target}&quot;&gt;{0={target}}&lt;/a&gt;
</span><ins>+[source-inlinemacro]
+&lt;a href=&quot;{sourceurl}{target}&quot;&gt;{0={target}}&lt;/a&gt;
</ins><span class="cx"> endif::backend-xhtml11[]
</span><span class="cx"> 
</span><span class="cx"> [paradef-default]
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportactivate1"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-activate.1 (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-activate.1        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-activate.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> '\&quot; t
</span><del>-.TH &quot;PORT\-ACTIVATE&quot; &quot;1&quot; &quot;2014\-08\-03&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</del><ins>+.TH &quot;PORT\-ACTIVATE&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</ins><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="cx"> .\&quot; * Define some portability stuff
</span><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="lines">@@ -51,7 +51,7 @@
</span><span class="cx"> To check the current status of a specific port, use \fB\fBport-installed\fR(1)\fR\&amp;.
</span><span class="cx"> .SH &quot;OPTIONS&quot;
</span><span class="cx"> .PP
</span><del>-\-\-no\-exec
</del><ins>+\fB\-\-no\-exec\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Do not execute any stored pre\- or post\-uninstall procedures\&amp;.
</span><span class="cx"> .RE
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportactivate1txt"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-activate.1.txt (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-activate.1.txt        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-activate.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> // vim: set et sw=4 ts=8 ft=asciidoc tw=80:
</span><span class="cx"> port-activate(1)
</span><del>-===============
</del><ins>+================
</ins><span class="cx"> $Id$
</span><span class="cx"> 
</span><span class="cx"> NAME
</span><span class="lines">@@ -38,7 +38,7 @@
</span><span class="cx"> OPTIONS
</span><span class="cx"> -------
</span><span class="cx"> 
</span><del>---no-exec::
</del><ins>+*--no-exec*::
</ins><span class="cx">     Do not execute any stored pre- or post-uninstall procedures.
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportarchivefetch1"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-archivefetch.1 (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-archivefetch.1        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-archivefetch.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> '\&quot; t
</span><del>-.TH &quot;PORT\-ARCHIVEFETCH&quot; &quot;1&quot; &quot;2014\-08\-04&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</del><ins>+.TH &quot;PORT\-ARCHIVEFETCH&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</ins><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="cx"> .\&quot; * Define some portability stuff
</span><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx"> .sp
</span><span class="cx"> Please see the section \fBGLOBAL OPTIONS\fR in the \fBport\fR(1) man page for a description of global port options\&amp;.
</span><span class="cx"> .PP
</span><del>-\-p
</del><ins>+\fB\-p\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Proceed even if a port fails to fetch\&amp;. This is useful if you are trying to download all available binary images for a number of ports, e\&amp;.g\&amp;., if you want to install them later without a network connection\&amp;.
</span><span class="cx"> .RE
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportarchivefetch1txt"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-archivefetch.1.txt (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-archivefetch.1.txt        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-archivefetch.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> 
</span><span class="cx"> include::global-flags.txt[]
</span><span class="cx"> 
</span><del>--p::
</del><ins>+*-p*::
</ins><span class="cx">     Proceed even if a port fails to fetch. This is useful if you are trying to
</span><span class="cx">     download all available binary images for a number of ports, e.g., if you
</span><span class="cx">     want to install them later without a network connection.
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportcd1"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-cd.1 (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-cd.1        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-cd.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> '\&quot; t
</span><del>-.TH &quot;PORT\-CD&quot; &quot;1&quot; &quot;2014\-08\-06&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</del><ins>+.TH &quot;PORT\-CD&quot; &quot;1&quot; &quot;2014\-08\-15&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</ins><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="cx"> .\&quot; * Define some portability stuff
</span><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="lines">@@ -25,12 +25,16 @@
</span><span class="cx"> .sp
</span><span class="cx"> To be used only in interactive mode:
</span><span class="cx"> .sp
</span><del>-\fBcd\fR [\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]
</del><ins>+.nf
+\fBcd\fR
+    [\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]
+.fi
</ins><span class="cx"> .SH &quot;DESCRIPTION&quot;
</span><span class="cx"> .sp
</span><span class="cx"> \fBcd\fR can be used in interactive mode of \fBport\fR (see \fBport-interactive\fR(7)) to change the current working directory to the directory that contains a given port\&amp;. The second parameter is not optional, as it usually is with \fBcd\fR in your shell\&amp;.
</span><ins>+.SH &quot;BUGS&quot;
</ins><span class="cx"> .sp
</span><del>-Note that \fBport cd\fR can be used from the command line, but is a no\-op\&amp;.
</del><ins>+\fBport cd\fR can be used from the command line, but is a no\-op\&amp;.
</ins><span class="cx"> .SH &quot;SEE ALSO&quot;
</span><span class="cx"> .sp
</span><span class="cx"> \fBport\fR(1), \fBport-interactive\fR(7)
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportcd1txt"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-cd.1.txt (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-cd.1.txt        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-cd.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -11,6 +11,7 @@
</span><span class="cx"> --------
</span><span class="cx"> To be used only in interactive mode:
</span><span class="cx"> 
</span><ins>+[cmdsynopsis]
</ins><span class="cx"> *cd*
</span><span class="cx">     ['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']
</span><span class="cx"> 
</span><span class="lines">@@ -21,7 +22,9 @@
</span><span class="cx"> port. The second parameter is not optional, as it usually is with *cd* in your
</span><span class="cx"> shell.
</span><span class="cx"> 
</span><del>-Note that *port cd* can be used from the command line, but is a no-op.
</del><ins>+BUGS
+----
+*port cd* can be used from the command line, but is a no-op.
</ins><span class="cx"> 
</span><span class="cx"> SEE ALSO
</span><span class="cx"> --------
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportcontents1"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-contents.1 (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-contents.1        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-contents.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> '\&quot; t
</span><del>-.TH &quot;PORT\-CONTENTS&quot; &quot;1&quot; &quot;2014\-08\-03&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</del><ins>+.TH &quot;PORT\-CONTENTS&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</ins><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="cx"> .\&quot; * Define some portability stuff
</span><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="lines">@@ -45,14 +45,14 @@
</span><span class="cx"> .\}
</span><span class="cx"> .SH &quot;OPTIONS&quot;
</span><span class="cx"> .PP
</span><del>-\-\-size
</del><ins>+\fB\-\-size\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Enable printing a human\-readable representation of the files\*(Aq sizes\&amp;. The size output can be adjusted using the
</span><span class="cx"> \fB\-\-units \fR\fB\fIunit\fR\fR
</span><span class="cx"> flag\&amp;.
</span><span class="cx"> .RE
</span><span class="cx"> .PP
</span><del>-\-\-units \fIunit\fR
</del><ins>+\fB\-\-units \fR\fB\fIunit\fR\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Used in conjunction with
</span><span class="cx"> \fB\-\-size\fR
</span><span class="lines">@@ -60,37 +60,37 @@
</span><span class="cx"> \fIunit\fR
</span><span class="cx"> are
</span><span class="cx"> .PP
</span><del>-B
</del><ins>+\fBB\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> List sizes in bytes\&amp;.
</span><span class="cx"> .RE
</span><span class="cx"> .PP
</span><del>-K, Ki, or KiB
</del><ins>+\fBK\fR, \fBKi\fR, \fBKiB\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> List sizes in KiB, i\&amp;.e\&amp;., 1024 bytes\&amp;.
</span><span class="cx"> .RE
</span><span class="cx"> .PP
</span><del>-Mi, or MiB
</del><ins>+\fBMi\fR, \fBMiB\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> List sizes in MiB, i\&amp;.e\&amp;., 1024 * 1024 bytes\&amp;.
</span><span class="cx"> .RE
</span><span class="cx"> .PP
</span><del>-Gi, or GiB
</del><ins>+\fBGi\fR, \fBGiB\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> List sizes in GiB, i\&amp;.e\&amp;., 1024 * 1024 * 1024 bytes\&amp;.
</span><span class="cx"> .RE
</span><span class="cx"> .PP
</span><del>-k, or kB
</del><ins>+\fBk\fR, \fBkB\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> List sizes in kB, i\&amp;.e\&amp;., 1000 bytes\&amp;.
</span><span class="cx"> .RE
</span><span class="cx"> .PP
</span><del>-M, or MB
</del><ins>+\fBM\fR, \fBMB\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> List sizes in MB, i\&amp;.e\&amp;., 1000 * 1000 bytes\&amp;.
</span><span class="cx"> .RE
</span><span class="cx"> .PP
</span><del>-G, or GB
</del><ins>+\fBG\fR, \fBGB\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> List sizes in GB, i\&amp;.e\&amp;., 1000 * 1000 * 1000 bytes\&amp;.
</span><span class="cx"> .RE
</span><span class="lines">@@ -99,7 +99,7 @@
</span><span class="cx"> .sp
</span><span class="cx"> Please see the section \fBGLOBAL OPTIONS\fR in the \fBport\fR(1) man page for a description of global port options\&amp;.
</span><span class="cx"> .PP
</span><del>-\-q
</del><ins>+\fB\-q\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Do not print the header line\&amp;.
</span><span class="cx"> .RE
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportcontents1txt"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-contents.1.txt (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-contents.1.txt        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-contents.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -29,39 +29,39 @@
</span><span class="cx"> OPTIONS
</span><span class="cx"> -------
</span><span class="cx"> 
</span><del>---size::
</del><ins>+*--size*::
</ins><span class="cx">     Enable printing a human-readable representation of the files' sizes. The
</span><span class="cx">     size output can be adjusted using the *--units 'unit'* flag.
</span><span class="cx"> 
</span><del>---units 'unit'::
</del><ins>+*--units 'unit'*::
</ins><span class="cx">     Used in conjunction with *--size* to choose the unit in which the size is
</span><span class="cx">     given. Valid values for 'unit' are
</span><span class="cx"> 
</span><del>-    B:::
</del><ins>+    *B*:::
</ins><span class="cx">         List sizes in bytes.
</span><span class="cx"> 
</span><del>-    K, Ki, or KiB:::
</del><ins>+    *K*, *Ki*, *KiB*:::
</ins><span class="cx">         List sizes in KiB, i.e., 1024 bytes.
</span><span class="cx"> 
</span><del>-    Mi, or MiB:::
</del><ins>+    *Mi*, *MiB*:::
</ins><span class="cx">         List sizes in MiB, i.e., 1024 * 1024 bytes.
</span><span class="cx"> 
</span><del>-    Gi, or GiB:::
</del><ins>+    *Gi*, *GiB*:::
</ins><span class="cx">         List sizes in GiB, i.e., 1024 * 1024 * 1024 bytes.
</span><span class="cx"> 
</span><del>-    k, or kB:::
</del><ins>+    *k*, *kB*:::
</ins><span class="cx">         List sizes in kB, i.e., 1000 bytes.
</span><span class="cx"> 
</span><del>-    M, or MB:::
</del><ins>+    *M*, *MB*:::
</ins><span class="cx">         List sizes in MB, i.e., 1000 * 1000 bytes.
</span><span class="cx"> 
</span><del>-    G, or GB:::
</del><ins>+    *G*, *GB*:::
</ins><span class="cx">         List sizes in GB, i.e., 1000 * 1000 * 1000 bytes.
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> include::global-flags.txt[]
</span><span class="cx"> 
</span><del>--q::
</del><ins>+*-q*::
</ins><span class="cx">     Do not print the header line.
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdependents1"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-dependents.1 (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-dependents.1        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-dependents.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> '\&quot; t
</span><del>-.TH &quot;PORT\-DEPENDENTS&quot; &quot;1&quot; &quot;2014\-08\-12&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</del><ins>+.TH &quot;PORT\-DEPENDENTS&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</ins><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="cx"> .\&quot; * Define some portability stuff
</span><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="lines">@@ -20,13 +20,18 @@
</span><span class="cx"> .\&quot; * MAIN CONTENT STARTS HERE *
</span><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="cx"> .SH &quot;NAME&quot;
</span><del>-port-dependents \- List ports that depend on a given (installed) port
</del><ins>+port-dependents, port-rdependents \- List ports that depend on a given (installed) port
</ins><span class="cx"> .SH &quot;SYNOPSIS&quot;
</span><span class="cx"> .sp
</span><span class="cx"> .nf
</span><span class="cx"> \fBport\fR [\fB\-D\fR \fIportdir\fR] \fBdependents\fR
</span><span class="cx">      [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
</span><span class="cx"> .fi
</span><ins>+.sp
+.nf
+\fBport\fR [\fB\-D\fR \fIportdir\fR] \fBrdependents\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
</ins><span class="cx"> .SH &quot;DESCRIPTION&quot;
</span><span class="cx"> .sp
</span><span class="cx"> \fBport dependents\fR reports which ports depend upon a given (installed) port, if any\&amp;. Note that \fBdependents\fR does not work for ports that are not installed on your system\&amp;. It uses the database of installed ports that MacPorts keeps internally, which records the dependency relations at installation time\&amp;. \fBport dependents\fR prints this information\&amp;.
</span><span class="lines">@@ -45,7 +50,9 @@
</span><span class="cx"> .sp
</span><span class="cx"> This command will, however, not cover dependencies that are only present in non\-default variants\&amp;. For more information about pseudo\-portname selectors, see \fBport\fR(1)\&amp;.
</span><span class="cx"> .sp
</span><del>-The dependency relations printed by \fBport dependents\fR are the same that are used to determine if a port can be safely uninstalled\&amp;. Ports that still have dependents installed cannot be uninstalled without either the \fB\-\-follow\-dependents\fR or the \fB\-f\fR flag\&amp;. See \fBport-uninstall\fR(1) for more details\&amp;.
</del><ins>+\fBport rdependents\fR will print a tree of installed ports that depend on the given port\&amp;.
+.sp
+The dependency relations printed by \fBport dependents\fR and \fBport rdependents\fR are the same that are used to determine if a port can be safely uninstalled\&amp;. Ports that still have dependents installed cannot be uninstalled without either the \fB\-\-follow\-dependents\fR or the \fB\-f\fR flag\&amp;. See \fBport-uninstall\fR(1) for more details\&amp;.
</ins><span class="cx"> .SH &quot;DEPENDENCY RELATIONS&quot;
</span><span class="cx"> .sp
</span><span class="cx"> Do not confuse \fIdependents\fR and \fIdependencies\fR (or, shortened, \fIdeps\fR)\&amp;. Refer to the following example to understand the difference:
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdependents1txt"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-dependents.1.txt (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-dependents.1.txt        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-dependents.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -5,7 +5,8 @@
</span><span class="cx"> 
</span><span class="cx"> NAME
</span><span class="cx"> ----
</span><del>-port-dependents - List ports that depend on a given (installed) port
</del><ins>+port-dependents, port-rdependents - List ports that depend on a given
+(installed) port
</ins><span class="cx"> 
</span><span class="cx"> SYNOPSIS
</span><span class="cx"> --------
</span><span class="lines">@@ -13,6 +14,10 @@
</span><span class="cx"> *port* [*-D* 'portdir'] *dependents*
</span><span class="cx">      [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
</span><span class="cx"> 
</span><ins>+[cmdsynopsis]
+*port* [*-D* 'portdir'] *rdependents*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
</ins><span class="cx"> DESCRIPTION
</span><span class="cx"> -----------
</span><span class="cx"> *port dependents* reports which ports depend upon a given (installed) port, if
</span><span class="lines">@@ -33,9 +38,12 @@
</span><span class="cx"> non-default variants. For more information about pseudo-portname selectors, see
</span><span class="cx"> man:port[1].
</span><span class="cx"> 
</span><del>-The dependency relations printed by *port dependents* are the same that are used
-to determine if a port can be safely uninstalled. Ports that still have
-dependents installed cannot be uninstalled without either the
</del><ins>+*port rdependents* will print a tree of installed ports that depend on the given
+port.
+
+The dependency relations printed by *port dependents* and *port rdependents* are
+the same that are used to determine if a port can be safely uninstalled. Ports
+that still have dependents installed cannot be uninstalled without either the
</ins><span class="cx"> *--follow-dependents* or the *-f* flag. See man:port-uninstall[1] for more
</span><span class="cx"> details.
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdir1fromrev124235trunkbasedocportdir1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-dir.1 (from rev 124235, trunk/base/doc/port-dir.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-dir.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-dir.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,90 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-DIR&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-dir, port-url, port-file, port-location, port-work \- Print paths for certain properties of a port
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR [\fB\-D\fR \fIportdir\fR] \fBdir\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.sp
+.nf
+\fBport\fR [\fB\-D\fR \fIportdir\fR] \fBurl\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.sp
+.nf
+\fBport\fR [\fB\-D\fR \fIportdir\fR] \fBfile\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.sp
+.nf
+\fBport\fR [\fB\-q\fR] [\fB\-D\fR \fIportdir\fR] \fBlocation\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.sp
+.nf
+\fBport\fR [\fB\-D\fR \fIportdir\fR] \fBwork\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+These commands print a path for each given port\&amp;. The meaning of the path differs by the command given:
+.sp
+\fBport dir\fR prints the directory that contains the \fIPortfile\fR for the given port expression\&amp;. This can be quite handy in your shell, if you want to locate a \fIPortfile\fR:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+cd $(port dir &lt;portname&gt;)
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+\fBport url\fR prints a unique URL for the given port expression\&amp;. This command mostly exists for historical reasons and isn\(cqt of much use nowadays\&amp;.
+.sp
+\fBport file\fR prints the path of the \fIPortfile\fR for the given port expression\&amp;. This can be useful to locate a port\(cqs definition\&amp;. Note that you can always get this by using \fBport dir\fR and appending \fIPortfile\fR\&amp;. You could use \fBport file\fR in a shell to edit a Portfile, but note that you can also use \fBport-edit\fR(1) to achieve the same\&amp;.
+.sp
+\fBport location\fR only works for installed ports and prints the location of the archive MacPorts internally uses to be able to deactivate and activate a port\&amp;. See \fBport-activate\fR(1) for more details on that\&amp;. This command might be useful for you if you want to setup a local binary mirror of MacPorts packages that are not available from our official infrastructure due to licensing reasons\&amp;.
+.sp
+\fBport work\fR prints the path to the so\-called \fIwork\fR directory, i\&amp;.e\&amp;., the directory used by MacPorts to build a port\&amp;. No output is generated if no build directory exists, e\&amp;.g\&amp;., because there is no unfinished build in progress for the given port\&amp;. Work directories are deleted after successful installation or using \fBport-clean\fR(1)\&amp;.
+.SH &quot;GLOBAL OPTIONS&quot;
+.sp
+Please see the section \fBGLOBAL OPTIONS\fR in the \fBport\fR(1) man page for a description of global port options\&amp;.
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1), \fBport-edit\fR(1), \fBport-activate\fR(1), \fBport-clean\fR(1)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdir1txtfromrev124235trunkbasedocportdir1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-dir.1.txt (from rev 124235, trunk/base/doc/port-dir.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-dir.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-dir.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,76 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-dir(1)
+===========
+$Id$
+
+NAME
+----
+port-dir, port-url, port-file, port-location, port-work - Print paths for
+certain properties of a port
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* [*-D* 'portdir'] *dir*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+[cmdsynopsis]
+*port* [*-D* 'portdir'] *url*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+[cmdsynopsis]
+*port* [*-D* 'portdir'] *file*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+[cmdsynopsis]
+*port* [*-q*] [*-D* 'portdir'] *location*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+[cmdsynopsis]
+*port* [*-D* 'portdir'] *work*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+DESCRIPTION
+-----------
+These commands print a path for each given port. The meaning of the path
+differs by the command given:
+
+*port dir* prints the directory that contains the 'Portfile' for the given port
+expression. This can be quite handy in your shell, if you want to locate
+a 'Portfile':
+
+----
+cd $(port dir &lt;portname&gt;)
+----
+
+*port url* prints a unique URL for the given port expression. This command
+mostly exists for historical reasons and isn't of much use nowadays.
+
+*port file* prints the path of the 'Portfile' for the given port expression.
+This can be useful to locate a port's definition. Note that you can always get
+this by using *port dir* and appending 'Portfile'. You could use *port file* in
+a shell to edit a Portfile, but note that you can also use man:port-edit[1] to
+achieve the same.
+
+*port location* only works for installed ports and prints the location of the
+archive MacPorts internally uses to be able to deactivate and activate a port.
+See man:port-activate[1] for more details on that. This command might be useful
+for you if you want to setup a local binary mirror of MacPorts packages that are
+not available from our official infrastructure due to licensing reasons.
+
+*port work* prints the path to the so-called 'work' directory, i.e., the
+directory used by MacPorts to build a port. No output is generated if no build
+directory exists, e.g., because there is no unfinished build in progress for the
+given port. Work directories are deleted after successful installation or using
+man:port-clean[1].
+
+include::global-flags.txt[]
+
+SEE ALSO
+--------
+man:port[1], man:port-edit[1], man:port-activate[1], man:port-clean[1]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdistcheck1fromrev124235trunkbasedocportdistcheck1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-distcheck.1 (from rev 124235, trunk/base/doc/port-distcheck.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-distcheck.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-distcheck.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-DEPS&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-distcheck \- Check if a port can be fetched from all of its mirrors
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR [\fB\-qvdy\fR] [\fB\-D\fR \fIportdir\fR] \fBdistcheck\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBport distcheck\fR downloads all source files for a given port from all available mirrors (including MacPorts\*(Aq mirror infrastructure) and checks that the modification date of the file on the mirror is not more recent than the modification date of the \fIPortfile\fR\&amp;.
+.sp
+Distcheck can be switched to verify the file size of the downloaded files instead by setting the \fIdistcheck\&amp;.type\fR option to \fIfilesize\fR in the \fIPortfile\fR for the tested port\&amp;.
+.SH &quot;BUGS&quot;
+.sp
+\fBport distcheck\fR should not rely on timestamps or file sizes but use the checksums available in the \fIPortfile\fR to verify the integrity of the files on the mirrors instead\&amp;. See \fBport-checksum\fR(1)\&amp;.
+.sp
+Meanwhile, you can use \m[blue]\fBport\-checkmirrors\fR\m[]\&amp;\s-2\u[1]\d\s+2 from contrib to do that\&amp;.
+.SH &quot;GLOBAL OPTIONS&quot;
+.sp
+Please see the section \fBGLOBAL OPTIONS\fR in the \fBport\fR(1) man page for a description of global port options\&amp;.
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1), \fBport-checksum\fR(1)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
+.SH &quot;EXTERNAL REFERENCES&quot;
+.IP &quot; 1.&quot; 4
+port-checkmirrors
+.RS 4
+\%https://trac.macports.org/browser/contrib/port-checkmirrors
+.RE
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdistcheck1txtfromrev124235trunkbasedocportdistcheck1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-distcheck.1.txt (from rev 124235, trunk/base/doc/port-distcheck.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-distcheck.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-distcheck.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,45 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-deps(1)
+============
+$Id$
+
+NAME
+----
+port-distcheck - Check if a port can be fetched from all of its mirrors
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* [*-qvdy*] [*-D* 'portdir'] *distcheck*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+DESCRIPTION
+-----------
+*port distcheck* downloads all source files for a given port from all available
+mirrors (including MacPorts' mirror infrastructure) and checks that the
+modification date of the file on the mirror is not more recent than the
+modification date of the 'Portfile'.
+
+Distcheck can be switched to verify the file size of the downloaded files
+instead by setting the 'distcheck.type' option to 'filesize' in the 'Portfile'
+for the tested port.
+
+BUGS
+----
+*port distcheck* should not rely on timestamps or file sizes but use the
+checksums available in the 'Portfile' to verify the integrity of the files on
+the mirrors instead. See man:port-checksum[1].
+
+Meanwhile, you can use source:contrib/port-checkmirrors[port-checkmirrors] from
+contrib to do that.
+
+include::global-flags.txt[]
+
+SEE ALSO
+--------
+man:port[1], man:port-checksum[1]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdistfiles1fromrev124235trunkbasedocportdistfiles1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-distfiles.1 (from rev 124235, trunk/base/doc/port-distfiles.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-distfiles.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-distfiles.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,49 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-DISTFILES&quot; &quot;1&quot; &quot;2014\-08\-15&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-distfiles \- Print a list of distribution files for a port
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR [\fB\-qvd\fR] [\fB\-D\fR \fIportdir\fR] \fBdistfiles\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+Print a list of source archives required to build the given port along with the checksums for the file and a list of mirrors\&amp;. If you want to verify that all mirrors actually serve the same file see \fBport-distcheck\fR(1)\&amp;.
+.sp
+To delete the distfiles once they have been downloaded, use \fBport clean \-\-dist\fR\&amp;. See \fBport-clean\fR(1) for more information regarding the \fBclean\fR command\&amp;.
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1), \fBport-distcheck\fR(1), \fBport-clean\fR(1)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdistfiles1txtfromrev124235trunkbasedocportdistfiles1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-distfiles.1.txt (from rev 124235, trunk/base/doc/port-distfiles.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-distfiles.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-distfiles.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,32 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-distfiles(1)
+=================
+$Id$
+
+NAME
+----
+port-distfiles - Print a list of distribution files for a port
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* [*-qvd*] [*-D* 'portdir'] *distfiles*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+DESCRIPTION
+-----------
+Print a list of source archives required to build the given port along with the
+checksums for the file and a list of mirrors. If you want to verify that all
+mirrors actually serve the same file see man:port-distcheck[1].
+
+To delete the distfiles once they have been downloaded, use *port clean --dist*.
+See man:port-clean[1] for more information regarding the *clean* command.
+
+SEE ALSO
+--------
+man:port[1], man:port-distcheck[1], man:port-clean[1]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdmg1fromrev124235trunkbasedocportdmg1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-dmg.1 (from rev 124235, trunk/base/doc/port-dmg.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-dmg.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-dmg.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,95 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-DMG&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-dmg, port-mdmg, port-pkg, port-mpkg \- Create binary archives of a port, and optionally its dependencies\&amp;.
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR [\fB\-vdqysbckpotf\fR] [\fB\-D\fR \fIportdir\fR] \fBdmg\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.sp
+.nf
+\fBport\fR [\fB\-vdqysbckpotf\fR] [\fB\-D\fR \fIportdir\fR] \fBmdmg\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.sp
+.nf
+\fBport\fR [\fB\-vdqysbckpotf\fR] [\fB\-D\fR \fIportdir\fR] \fBpkg\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.sp
+.nf
+\fBport\fR [\fB\-vdqysbckpotf\fR] [\fB\-D\fR \fIportdir\fR] \fBmpkg\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+These commands create OS X\-native binary archives of a given port\&amp;. Depending on the command, one of a \&amp;.dmg disk image file, a \&amp;.pkg, or \&amp;.mpkg installer package is created\&amp;.
+.sp
+\fBport pkg\fR creates an OS X installer package that installs all files that belong to a given port\&amp;. \fBport dmg\fR wraps this installer package in a disk image\&amp;. In most cases you probably want to package a port and all its library and runtime dependencies in a single package suitable for binary distribution\&amp;. \fBport pkg\fR and \fBport dmg\fR don\(cqt do that, so those are only useful if you are going to take care of the dependencies separately\&amp;. \fBport mpkg\fR creates an \&amp;.mpkg installer image that contains installer packages for each of the dependencies and is suitable for standalone redistribution\&amp;. \fBport mdmg\fR wraps this \&amp;.mpkg package in a disk image\&amp;.
+.sp
+On OS X 10\&amp;.6 and later, the generated installer packages are in \(lqflat\(rq format, such that wrapping them in a disk image is no longer necessary for online redistribution\&amp;. Prior to OS X 10\&amp;.6, generated installer packages could not be used for online distribution without a wrapping disk image\&amp;.
+.sp
+All packages are placed in a port\(cqs work directory, which can be located using \fBport-work\fR(1)\&amp;.
+.if n \{\
+.sp
+.\}
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBWarning\fR
+.ps -1
+.br
+.sp
+If you want to create installer packages using MacPorts for redistribution, make sure you do not use a standard installation of MacPorts in \fI/opt/local\fR\&amp;. If you do that, your installer package will conflict on systems that \fBdo\fR have MacPorts installed\&amp;.
+.sp
+Instead, follow \m[blue]\fBSection 2\&amp;.2\&amp;.4 of the MacPorts Guide\fR\m[]\&amp;\s-2\u[1]\d\s+2 and choose a prefix specific to the software you are trying to package, e\&amp;.g\&amp;., \fI/opt/logrotate\fR for \fIlogrotate\fR\&amp;. Then use this custom MacPorts installation to build your package\&amp;.
+.sp .5v
+.RE
+.SH &quot;GLOBAL OPTIONS&quot;
+.sp
+Please see the section \fBGLOBAL OPTIONS\fR in the \fBport\fR(1) man page for a description of global port options\&amp;.
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1), \fBport-work\fR(1), \m[blue]\fBSection 2\&amp;.2\&amp;.4 of the MacPorts Guide\fR\m[]\&amp;\s-2\u[1]\d\s+2
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
+.SH &quot;EXTERNAL REFERENCES&quot;
+.IP &quot; 1.&quot; 4
+Section 2.2.4 of the MacPorts Guide
+.RS 4
+\%http://guide.macports.org/#installing.macports.source.multiple
+.RE
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdmg1txtfromrev124235trunkbasedocportdmg1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-dmg.1.txt (from rev 124235, trunk/base/doc/port-dmg.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-dmg.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-dmg.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,76 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-dmg(1)
+===========
+$Id$
+
+NAME
+----
+port-dmg, port-mdmg, port-pkg, port-mpkg - Create binary archives of a port, and
+optionally its dependencies.
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* [*-vdqysbckpotf*] [*-D* 'portdir'] *dmg*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+[cmdsynopsis]
+*port* [*-vdqysbckpotf*] [*-D* 'portdir'] *mdmg*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+[cmdsynopsis]
+*port* [*-vdqysbckpotf*] [*-D* 'portdir'] *pkg*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+[cmdsynopsis]
+*port* [*-vdqysbckpotf*] [*-D* 'portdir'] *mpkg*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+DESCRIPTION
+-----------
+These commands create OS X-native binary archives of a given port. Depending on
+the command, one of a .dmg disk image file, a .pkg, or .mpkg installer package
+is created.
+
+*port pkg* creates an OS X installer package that installs all files that belong
+to a given port. *port dmg* wraps this installer package in a disk image. In
+most cases you probably want to package a port and all its library and runtime
+dependencies in a single package suitable for binary distribution. *port pkg*
+and *port dmg* don't do that, so those are only useful if you are going to take
+care of the dependencies separately. *port mpkg* creates an .mpkg installer
+image that contains installer packages for each of the dependencies and is
+suitable for standalone redistribution. *port mdmg* wraps this .mpkg package in
+a disk image.
+
+On OS X 10.6 and later, the generated installer packages are in ``flat'' format,
+such that wrapping them in a disk image is no longer necessary for online
+redistribution. Prior to OS X 10.6, generated installer packages could not be
+used for online distribution without a wrapping disk image.
+
+All packages are placed in a port's work directory, which can be located using
+man:port-work[1].
+
+[WARNING]
+====
+If you want to create installer packages using MacPorts for redistribution, make
+sure you do not use a standard installation of MacPorts in '/opt/local'. If you
+do that, your installer package will conflict on systems that *do* have MacPorts
+installed.
+
+Instead, follow guide:installing.macports.source.multiple[Section 2.2.4 of the
+MacPorts Guide] and choose a prefix specific to the software you are trying to
+package, e.g., '/opt/logrotate' for 'logrotate'. Then use this custom MacPorts
+installation to build your package.
+====
+
+include::global-flags.txt[]
+
+SEE ALSO
+--------
+man:port[1], man:port-work[1], guide:installing.macports.source.multiple[Section
+2.2.4 of the MacPorts Guide]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdoctor1fromrev124235trunkbasedocportdoctor1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-doctor.1 (from rev 124235, trunk/base/doc/port-doctor.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-doctor.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-doctor.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-DOCTOR&quot; &quot;1&quot; &quot;08/20/2014&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-doctor \- Detects common issues
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport doctor\fR
+        [\-\-quiet]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBport doctor\fR will check a list of common issues that could affect the user or MacPorts in one way or another\&amp;. If any issues are found, a warning will be shown to the user included with a possible fix for said problem\&amp;.
+.SH &quot;OPTIONS&quot;
+.PP
+\fB\-\-quiet\fR
+.RS 4
+Only display warnings or errors\&amp;.
+.RE
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Kyle Sammons &lt;ksammons@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportdoctor1txtfromrev124235trunkbasedocportdoctor1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-doctor.1.txt (from rev 124235, trunk/base/doc/port-doctor.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-doctor.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-doctor.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-doctor(1)
+==============
+$Id$
+
+NAME
+----
+port-doctor - Detects common issues 
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port doctor*
+        [--quiet]
+
+DESCRIPTION
+-----------
+*port doctor* will check a list of common issues that could affect the user or
+MacPorts in one way or another. If any issues are found, a warning will be
+shown to the user included with a possible fix for said problem.
+
+OPTIONS
+-------
+*--quiet*::
+Only display warnings or errors.
+
+SEE ALSO
+--------
+man:port[1]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Kyle Sammons &lt;ksammons@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportecho1fromrev124235trunkbasedocportecho1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-echo.1 (from rev 124235, trunk/base/doc/port-echo.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-echo.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-echo.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,80 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-ECHO&quot; &quot;1&quot; &quot;2014\-08\-15&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-echo \- Print the list of ports the argument expands to
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR \fBecho\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBport echo\fR expands its argument list according to MacPorts\*(Aq rules and prints a list of ports that match the expression given as argument\&amp;. It can be useful to see what a pseudo\-portname or a pseudo\-portname selector (see \fBport\fR(1)) expands to\&amp;.
+.sp
+If \fBport echo\fR doesn\(cqt recognize an argument as port, it will still print it as\-is\&amp;. You cannot use \fBport echo\fR to check whether a port exists:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+$ port echo nonexistentport
+nonexistentport
+.fi
+.if n \{\
+.RE
+.\}
+.SH &quot;EXAMPLES&quot;
+.sp
+Common use cases are:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+port echo depends:zlib
+port echo inactive
+port echo obsolete
+port echo requested
+port echo leaves
+port echo category:^mail$
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+Note that \fBecho\fR is usually \fInot\fR used to list outdated ports, since a separate action \fBport-outdated\fR(1) exists for that\&amp;. \fBport outdated\fR has the advantage compared to \fBport echo outdated\fR that it gives the reason why MacPorts considers the port outdated\&amp;.
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1), \fBport-outdated\fR(1)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportecho1txtfromrev124235trunkbasedocportecho1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-echo.1.txt (from rev 124235, trunk/base/doc/port-echo.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-echo.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-echo.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,56 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-echo(1)
+============
+$Id$
+
+NAME
+----
+port-echo - Print the list of ports the argument expands to
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* *echo*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+DESCRIPTION
+-----------
+*port echo* expands its argument list according to MacPorts' rules and prints
+a list of ports that match the expression given as argument. It can be useful to
+see what a pseudo-portname or a pseudo-portname selector (see man:port[1])
+expands to.
+
+If *port echo* doesn't recognize an argument as port, it will still print it
+as-is. You cannot use *port echo* to check whether a port exists:
+
+----
+$ port echo nonexistentport
+nonexistentport
+----
+
+EXAMPLES
+--------
+Common use cases are:
+
+----
+port echo depends:zlib
+port echo inactive
+port echo obsolete
+port echo requested
+port echo leaves
+port echo category:^mail$
+----
+
+Note that *echo* is usually 'not' used to list outdated ports, since a separate
+action man:port-outdated[1] exists for that. *port outdated* has the advantage
+compared to *port echo outdated* that it gives the reason why MacPorts considers
+the port outdated.
+
+SEE ALSO
+--------
+man:port[1], man:port-outdated[1]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportedit1"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-edit.1 (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-edit.1        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-edit.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> '\&quot; t
</span><del>-.TH &quot;PORT\-EDIT&quot; &quot;1&quot; &quot;2014\-08\-03&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</del><ins>+.TH &quot;PORT\-EDIT&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</ins><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="cx"> .\&quot; * Define some portability stuff
</span><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="lines">@@ -30,7 +30,7 @@
</span><span class="cx"> .fi
</span><span class="cx"> .SH &quot;DESCRIPTION&quot;
</span><span class="cx"> .sp
</span><del>-\fBport edit\fR will open the associated Portfile in an editor\&amp;. It will try to determine your favorite editor by respecting the environment variables \fB$VISUAL\fR or \fB$EDITOR\fR in this order\&amp;. If none has been set it will fallback to \fI/usr/bin/vi\fR\&amp;. Your shell will be blocked until the editor returns\&amp;. The path to the Portfile is passed as one single argument to the editor\&amp;.
</del><ins>+\fBport edit\fR will open the associated \fIPortfile\fR in an editor\&amp;. It will try to determine your favorite editor by respecting the environment variables \fB$VISUAL\fR or \fB$EDITOR\fR in this order\&amp;. If none has been set it will fallback to \fI/usr/bin/vi\fR\&amp;. Your shell will be blocked until the editor returns\&amp;. The path to the \fIPortfile\fR is passed as one single argument to the editor\&amp;.
</ins><span class="cx"> .sp
</span><span class="cx"> If you specify multiple ports, the editor is executed multiple times for each of them one after another\&amp;.
</span><span class="cx"> .if n \{\
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportedit1txt"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-edit.1.txt (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-edit.1.txt        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-edit.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -16,11 +16,11 @@
</span><span class="cx"> 
</span><span class="cx"> DESCRIPTION
</span><span class="cx"> -----------
</span><del>-*port edit* will open the associated Portfile in an editor. It will try to
</del><ins>+*port edit* will open the associated 'Portfile' in an editor. It will try to
</ins><span class="cx"> determine your favorite editor by respecting the environment variables *$VISUAL*
</span><span class="cx"> or *$EDITOR* in this order. If none has been set it will fallback to
</span><span class="cx"> '/usr/bin/vi'. Your shell will be blocked until the editor returns. The path to
</span><del>-the Portfile is passed as one single argument to the editor.
</del><ins>+the 'Portfile' is passed as one single argument to the editor.
</ins><span class="cx"> 
</span><span class="cx"> If you specify multiple ports, the editor is executed multiple times for
</span><span class="cx"> each of them one after another.
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportexit1fromrev124235trunkbasedocportexit1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-exit.1 (from rev 124235, trunk/base/doc/port-exit.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-exit.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-exit.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,55 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-EXIT&quot; &quot;1&quot; &quot;2014\-08\-15&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-exit \- Exit interactive mode
+.SH &quot;SYNOPSIS&quot;
+.sp
+To be used only in interactive mode:
+.sp
+.nf
+\fBexit\fR
+.fi
+.sp
+.nf
+\fBquit\fR
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBexit\fR or \fBquit\fR can only be used in interactive mode of \fBport\fR (see \fBport-interactive\fR(7))\&amp;. It causes the interactive interpreter to exit\&amp;.
+.SH &quot;BUGS&quot;
+.sp
+\fBport exit\fR and \fBport quit\fR can be used from the command line, but are no\-ops\&amp;.
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1), \fBport-interactive\fR(7)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportexit1txtfromrev124235trunkbasedocportexit1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-exit.1.txt (from rev 124235, trunk/base/doc/port-exit.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-exit.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-exit.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-exit(1)
+============
+$Id$
+
+NAME
+----
+port-exit - Exit interactive mode
+
+SYNOPSIS
+--------
+To be used only in interactive mode:
+
+[cmdsynopsis]
+*exit*
+
+[cmdsynopsis]
+*quit*
+
+DESCRIPTION
+-----------
+*exit* or *quit* can only be used in interactive mode of *port* (see
+man:port-interactive[7]). It causes the interactive interpreter to exit.
+
+BUGS
+----
+*port exit* and *port quit* can be used from the command line, but are no-ops.
+
+SEE ALSO
+--------
+man:port[1], man:port-interactive[7]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportfile1fromrev124235trunkbasedocportfile1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-file.1 (from rev 124235, trunk/base/doc/port-file.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-file.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-file.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dir.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportfile1soelimfromrev124235trunkbasedocportfile1soelim"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-file.1.soelim (from rev 124235, trunk/base/doc/port-file.1.soelim) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-file.1.soelim                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-file.1.soelim        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dir.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportgohome1fromrev124235trunkbasedocportgohome1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-gohome.1 (from rev 124235, trunk/base/doc/port-gohome.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-gohome.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-gohome.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,47 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-GOHOME&quot; &quot;1&quot; &quot;2014\-08\-15&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-gohome \- Open the homepage of the given port(s)
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR [\fB\-D\fR \fIportdir\fR] \fBgohome\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBport gohome\fR opens the homepage of the given port(s) in your default browser\&amp;.
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportgohome1txtfromrev124235trunkbasedocportgohome1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-gohome.1.txt (from rev 124235, trunk/base/doc/port-gohome.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-gohome.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-gohome.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,27 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-gohome(1)
+==============
+$Id$
+
+NAME
+----
+port-gohome - Open the homepage of the given port(s)
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* [*-D* 'portdir'] *gohome*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+DESCRIPTION
+-----------
+*port gohome* opens the homepage of the given port(s) in your default browser.
+
+SEE ALSO
+--------
+man:port[1]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportinfo1fromrev124235trunkbasedocportinfo1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-info.1 (from rev 124235, trunk/base/doc/port-info.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-info.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-info.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,168 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-INFO&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-info \- Return information about the given ports\&amp;.
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR [\fB\-q\fR] [\fB\-D\fR \fIportdir\fR] \fBinfo\fR
+     [\-\-categories|\-\-category] [\-\-depends] [\-\-depends_fetch] [\-\-depends_extract]
+     [\-\-depends_build] [\-\-depends_lib] [\-\-depends_run] [\-\-description] [\-\-epoch]
+     [\-\-fullname] [\-\-heading] [\-\-homepage] [\-\-index] [\-\-license] [\-\-line]
+     [\-\-long_description] [\-\-maintainer|\-\-maintainers] [\-\-name]
+     [\-\-platform|\-\-platforms] [\-\-portdir] [\-\-pretty] [\-\-replaced_by]
+     [\-\-revision] [\-\-subports] [\-\-variant|\-\-variants] [\-\-version]
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBport info\fR prints information about the given ports\&amp;. Specifying at least one of the options limits the output to the corresponding field\&amp;. If no fields are specified, a useful default set consisting of name, epoch, version, revision, categories, replaced_by, variants, description, homepage, dependencies, platforms, license, and maintainers is shown\&amp;.
+.SH &quot;OPTIONS&quot;
+.sp
+The following options do not select fields for the output but change how the information is obtained or formatted:
+.PP
+\fB\-\-index\fR
+.RS 4
+Do not read the
+\fIPortfile\fR, but rely solely on the port index information\&amp;. Note that this option will prevent the information reported from reflecting the effects of any variants specified\&amp;.
+.RE
+.PP
+\fB\-\-line\fR
+.RS 4
+Print a single line for each port\&amp;. Fields are separated by spaces\&amp;.
+.RE
+.PP
+\fB\-\-pretty\fR
+.RS 4
+Format the output in a convenient, human\-readable fashion\&amp;. This is the default when no options are specified\&amp;.
+.RE
+.sp
+The rest of the options affect which fields will be given in the output:
+.PP
+\fB\-\-category\fR, \fB\-\-categories\fR
+.RS 4
+List the categories of a port\&amp;.
+.RE
+.PP
+\fB\-\-depends\fR, \fB\-\-depends_fetch\fR, \fB\-\-depends_extract\fR, \fB\-\-depends_build\fR, \fB\-\-depends_lib\fR, \fB\-\-depends_run\fR
+.RS 4
+List the specified dependencies of a port\&amp;.
+\fB\-\-depends\fR
+is a shorthand option for all other
+\fB\-\-depends_\fR* options\&amp;.
+.RE
+.PP
+\fB\-\-description\fR, \fB\-\-long_description\fR
+.RS 4
+Print the short or long description of a port, respectively\&amp;.
+.RE
+.PP
+\fB\-\-epoch\fR, \fB\-\-version\fR, \fB\-\-revision\fR
+.RS 4
+List the components of a MacPorts version tuple, epoch, version and revision, respectively\&amp;.
+.RE
+.PP
+\fB\-\-fullname\fR
+.RS 4
+Print name and the full MacPorts version tuple, e\&amp;.g\&amp;., \(lqyubico\-pam @2\&amp;.16\(rq\&amp;.
+.RE
+.PP
+\fB\-\-heading\fR
+.RS 4
+Like
+\fB\-\-fullname\fR
+but including the categories\&amp;.
+.RE
+.PP
+\fB\-\-homepage\fR
+.RS 4
+List the homepage of a port\&amp;.
+.RE
+.PP
+\fB\-\-license\fR
+.RS 4
+Print the license that applies to the source code of a port\&amp;.
+.RE
+.PP
+\fB\-\-maintainer\fR, \fB\-\-maintainers\fR
+.RS 4
+List the email address(es) of a port\(cqs maintainer(s)\&amp;.
+.RE
+.PP
+\fB\-\-name\fR
+.RS 4
+Print the name of a port\&amp;.
+.RE
+.PP
+\fB\-\-platform\fR, \fB\-\-platforms\fR
+.RS 4
+List the platforms supported by a port\&amp;. This field exists for historical reasons only\&amp;. In modern MacPorts, this is always
+\fIdarwin\fR, i\&amp;.e\&amp;., OS X\&amp;.
+.RE
+.PP
+\fB\-\-portdir\fR
+.RS 4
+Print the path to a port\(cqs directory relative to the port tree root\&amp;.
+.RE
+.PP
+\fB\-\-replaced_by\fR
+.RS 4
+List the name of the port that replaces a port, if any\&amp;.
+.RE
+.PP
+\fB\-\-subports\fR
+.RS 4
+Print a list of subports defined by this port\(cqs
+\fIPortfile\fR, i\&amp;.e\&amp;., ports that are defined in the same
+\fIPortfile\fR
+because they share common parts\&amp;.
+.RE
+.PP
+\fB\-\-variant\fR, \fB\-\-variants\fR
+.RS 4
+List the variants defined by a port by name\&amp;.
+.RE
+.SH &quot;GLOBAL OPTIONS&quot;
+.sp
+Please see the section \fBGLOBAL OPTIONS\fR in the \fBport\fR(1) man page for a description of global port options\&amp;.
+.PP
+\fB\-q\fR
+.RS 4
+Do not print the field description when using
+\fB\-\-pretty\fR
+output\&amp;.
+.RE
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportinfo1txtfromrev124235trunkbasedocportinfo1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-info.1.txt (from rev 124235, trunk/base/doc/port-info.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-info.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-info.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,110 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-info(1)
+============
+$Id$
+
+NAME
+----
+port-info - Return information about the given ports.
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* [*-q*] [*-D* 'portdir'] *info*
+     [--categories|--category] [--depends] [--depends_fetch] [--depends_extract]
+     [--depends_build] [--depends_lib] [--depends_run] [--description] [--epoch]
+     [--fullname] [--heading] [--homepage] [--index] [--license] [--line]
+     [--long_description] [--maintainer|--maintainers] [--name]
+     [--platform|--platforms] [--portdir] [--pretty] [--replaced_by]
+     [--revision] [--subports] [--variant|--variants] [--version]
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+DESCRIPTION
+-----------
+*port info* prints information about the given ports. Specifying at least one of
+the options limits the output to the corresponding field. If no fields are
+specified, a useful default set consisting of name, epoch, version, revision,
+categories, replaced_by, variants, description, homepage, dependencies,
+platforms, license, and maintainers is shown.
+
+OPTIONS
+-------
+The following options do not select fields for the output but change how the
+information is obtained or formatted:
+
+*--index*::
+    Do not read the 'Portfile', but rely solely on the port index information.
+    Note that this option will prevent the information reported from reflecting
+    the effects of any variants specified.
+
+*--line*::
+    Print a single line for each port. Fields are separated by spaces.
+
+*--pretty*::
+    Format the output in a convenient, human-readable fashion. This is the
+    default when no options are specified.
+
+The rest of the options affect which fields will be given in the output:
+
+*--category*, *--categories*::
+    List the categories of a port.
+
+*--depends*, *--depends_fetch*, *--depends_extract*, *--depends_build*, *--depends_lib*, *--depends_run*::
+    List the specified dependencies of a port. *--depends* is a shorthand option
+    for all other *--depends_** options.
+
+*--description*, *--long_description*::
+    Print the short or long description of a port, respectively.
+
+*--epoch*, *--version*, *--revision*::
+    List the components of a MacPorts version tuple, epoch, version and
+    revision, respectively.
+
+*--fullname*::
+    Print name and the full MacPorts version tuple, e.g., ``yubico-pam @2.16''.
+
+*--heading*::
+    Like *--fullname* but including the categories.
+
+*--homepage*::
+    List the homepage of a port.
+
+*--license*::
+    Print the license that applies to the source code of a port.
+
+*--maintainer*, *--maintainers*::
+    List the email address(es) of a port's maintainer(s).
+
+*--name*::
+    Print the name of a port.
+
+*--platform*, *--platforms*::
+    List the platforms supported by a port. This field exists for historical
+    reasons only. In modern MacPorts, this is always 'darwin', i.e., OS X.
+
+*--portdir*::
+    Print the path to a port's directory relative to the port tree root.
+
+*--replaced_by*::
+    List the name of the port that replaces a port, if any.
+
+*--subports*::
+    Print a list of subports defined by this port's 'Portfile', i.e., ports that
+    are defined in the same 'Portfile' because they share common parts.
+
+*--variant*, *--variants*::
+    List the variants defined by a port by name.
+
+include::global-flags.txt[]
+
+*-q*::
+    Do not print the field description when using *--pretty* output.
+
+SEE ALSO
+--------
+man:port[1]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportinstalled1fromrev124235trunkbasedocportinstalled1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-installed.1 (from rev 124235, trunk/base/doc/port-installed.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-installed.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-installed.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,77 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-INSTALLED&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-installed \- List installed versions of a given port, or all installed ports
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR [\fB\-vq\fR] \fBinstalled\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBport installed\fR can be used in two separate ways: Either without arguments, in which case it will print a list of all installed ports (both active and inactive), or with arguments, which will return a list of installed ports that match the argument expression\&amp;.
+.sp
+The output of \fBport installed\fR contains the name, version and variants of the installed ports and whether the port is active or inactive\&amp;. See the PORT IMAGES section for an explanation of the active/inactive state\&amp;.
+.SH &quot;GLOBAL OPTIONS&quot;
+.sp
+Please see the section \fBGLOBAL OPTIONS\fR in the \fBport\fR(1) man page for a description of global port options\&amp;.
+.PP
+\fB\-v\fR
+.RS 4
+Print the platform at install time (i\&amp;.e\&amp;., your OS X version) and the architecture(s) of the installed port\&amp;.
+.RE
+.PP
+\fB\-q\fR
+.RS 4
+Do not print the header line\&amp;. This is useful when parsing the output of
+\fBport installed\fR
+in scripts for further processing\&amp;.
+.RE
+.SH &quot;PORT IMAGES&quot;
+.sp
+MacPorts has the ability to install multiple versions or different variant selections of the same port\&amp;. The files will be stored in an intermediate location as \fIarchives\fR, which allows to switch between the versions\&amp;. Only one version can be active at a time\&amp;. On activation, files will be copied to their intended place in \fIprefix\fR\&amp;.
+.sp
+More information on this topic can be found in the \m[blue]\fBThe MacPorts Guide\fR\m[]\&amp;\s-2\u[1]\d\s+2\&amp;.
+.sp
+To check the current status of a specific port, use \fB\fBport-installed\fR(1)\fR\&amp;.
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1), \fBport-activate\fR(1)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
+.SH &quot;EXTERNAL REFERENCES&quot;
+.IP &quot; 1.&quot; 4
+The MacPorts Guide
+.RS 4
+\%http://guide.macports.org/#internals.images
+.RE
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportinstalled1txtfromrev124235trunkbasedocportinstalled1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-installed.1.txt (from rev 124235, trunk/base/doc/port-installed.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-installed.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-installed.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-installed(1)
+=================
+$Id$
+
+NAME
+----
+port-installed - List installed versions of a given port, or all installed ports
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* [*-vq*] *installed*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+DESCRIPTION
+-----------
+*port installed* can be used in two separate ways: Either without arguments, in
+which case it will print a list of all installed ports (both active and
+inactive), or with arguments, which will return a list of installed ports that
+match the argument expression.
+
+The output of *port installed* contains the name, version and variants of the
+installed ports and whether the port is active or inactive. See the PORT IMAGES
+section for an explanation of the active/inactive state.
+
+include::global-flags.txt[]
+
+*-v*::
+    Print the platform at install time (i.e., your OS X version) and the
+    architecture(s) of the installed port.
+
+*-q*::
+    Do not print the header line. This is useful when parsing the output of
+    *port installed* in scripts for further processing.
+
+include::archives.txt[]
+
+SEE ALSO
+--------
+man:port[1], man:port-activate[1]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportlint1fromrev124235trunkbasedocportlint1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-lint.1 (from rev 124235, trunk/base/doc/port-lint.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-lint.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-lint.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,122 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-LINT&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-lint \- Check a port for common problems
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR [\fB\-vdq\fR] [\fB\-D\fR \fIportdir\fR] \fBlint\fR
+     [\-\-nitpick]
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBport lint\fR checks the \fIPortfile\fR of a given port for potential errors\&amp;. It is a useful tool for port maintainers to check for possible typos, mistakes and missing definitions\&amp;.
+.sp
+For example, it verifies that
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+Portfiles are valid UTF\-8
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+all mandatory properties are present
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+all dependencies actually exist, and
+.RE
+.sp
+.RS 4
+.ie n \{\
+\h'-04'\(bu\h'+03'\c
+.\}
+.el \{\
+.sp -1
+.IP \(bu 2.3
+.\}
+no deprecated features are used\&amp;.
+.RE
+.sp
+If problems are found, \fBport lint\fR emits warnings and error messages explaining the problem\&amp;. Please fix all errors and consider fixing any warnings before submitting your \fIPortfile\fR or your changes to MacPorts\&amp;.
+.SH &quot;OPTIONS&quot;
+.PP
+\fB\-\-nitpick\fR
+.RS 4
+Enables additional checks that are mostly whitespace\-related and best practices\&amp;.
+.RE
+.SH &quot;GLOBAL OPTIONS&quot;
+.sp
+Please see the section \fBGLOBAL OPTIONS\fR in the \fBport\fR(1) man page for a description of global port options\&amp;.
+.PP
+\fB\-v\fR
+.RS 4
+Print messages for successful tests\&amp;.
+.RE
+.PP
+\fB\-d\fR
+.RS 4
+Print the
+\fIPortfile\fR, and debugging information parsed from the
+\fIPortfile\fR\&amp;.
+.RE
+.PP
+\fB\-q\fR
+.RS 4
+Supress the header line, warning and error count; only print warnings and errors, if any\&amp;.
+.RE
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1), \fBportfile\fR(7), \fBport-dev-style\fR(7)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportlint1txtfromrev124235trunkbasedocportlint1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-lint.1.txt (from rev 124235, trunk/base/doc/port-lint.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-lint.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-lint.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,60 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-lint(1)
+============
+$Id$
+
+NAME
+----
+port-lint - Check a port for common problems
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* [*-vdq*] [*-D* 'portdir'] *lint*
+     [--nitpick]
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+DESCRIPTION
+-----------
+*port lint* checks the 'Portfile' of a given port for potential errors. It is
+a useful tool for port maintainers to check for possible typos, mistakes and
+missing definitions.
+
+For example, it verifies that
+
+ * Portfiles are valid UTF-8
+ * all mandatory properties are present
+ * all dependencies actually exist, and
+ * no deprecated features are used.
+
+If problems are found, *port lint* emits warnings and error messages explaining
+the problem. Please fix all errors and consider fixing any warnings before
+submitting your 'Portfile' or your changes to MacPorts.
+
+OPTIONS
+-------
+*--nitpick*::
+    Enables additional checks that are mostly whitespace-related and best
+    practices.
+
+include::global-flags.txt[]
+
+*-v*::
+    Print messages for successful tests.
+
+*-d*::
+    Print the 'Portfile', and debugging information parsed from the 'Portfile'.
+
+*-q*::
+    Supress the header line, warning and error count; only print warnings and
+    errors, if any.
+
+
+SEE ALSO
+--------
+man:port[1], man:portfile[7], man:port-dev-style[7]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportlist1fromrev124235trunkbasedocportlist1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-list.1 (from rev 124235, trunk/base/doc/port-list.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-list.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-list.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,67 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-ECHO&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-list \- List the latest available version for the given ports
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR \fBlist\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBport list\fR prints the latest version of the given port(s) that is available through MacPorts\&amp;. It prints name, version number and the relative path of the port in the port tree, i\&amp;.e\&amp;. the name of the primary category followed by the port name\&amp;.
+.if n \{\
+.sp
+.\}
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBNote\fR
+.ps -1
+.br
+.sp
+\fBport list\fR will always print the latest \fBavailable\fR version, which is not necessarily the version you have installed\&amp;.
+.sp
+This leads to the common mistake that \fBport list installed\fR lists the same port multiple times in the same version\&amp;. This happens because \fBinstalled\fR expands to a list of installed ports and their versions, but \fBport list\fR ignores the version and prints the latest available version for each occurrence of a port in \fBinstalled\fR\&amp;. In these cases, you should use \fBport-installed\fR(1) or \fBport-echo\fR(1) instead\&amp;. \fBport installed\fR and \fBport echo\fR also have the advantage of being much faster\&amp;.
+.sp .5v
+.RE
+.sp
+Pretty much the only use case for \fBport list\fR is checking which version of a specific port is current in MacPorts, or if a port exists at all\&amp;. Do \fBnot\fR use \fBport list\fR to print \fBoutdated\fR, \fBinactive\fR, \fBinstalled\fR, \fBrequested\fR, \fBleaves\fR, or other pseudo\-ports\&amp;. Use \fBport-outdated\fR(1), \fBport-installed\fR(1), or \fBport-echo\fR(1) instead\&amp;.
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1), \fBport-installed\fR(1), \fBport-echo\fR(1), \fBport-outdated\fR(1)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportlist1txtfromrev124235trunkbasedocportlist1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-list.1.txt (from rev 124235, trunk/base/doc/port-list.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-list.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-list.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,50 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-echo(1)
+============
+$Id$
+
+NAME
+----
+port-list - List the latest available version for the given ports
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* *list*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+DESCRIPTION
+-----------
+*port list* prints the latest version of the given port(s) that is available
+through MacPorts. It prints name, version number and the relative path of the
+port in the port tree, i.e. the name of the primary category followed by the
+port name.
+
+[NOTE]
+====
+*port list* will always print the latest *available* version, which is not
+necessarily the version you have installed.
+
+This leads to the common mistake that *port list installed* lists the same port
+multiple times in the same version. This happens because *installed* expands to
+a list of installed ports and their versions, but *port list* ignores the
+version and prints the latest available version for each occurrence of a port in
+*installed*. In these cases, you should use man:port-installed[1] or
+man:port-echo[1] instead. *port installed* and *port echo* also have the
+advantage of being much faster.
+====
+
+Pretty much the only use case for *port list* is checking which version of
+a specific port is current in MacPorts, or if a port exists at all. Do *not* use
+*port list* to print *outdated*, *inactive*, *installed*, *requested*, *leaves*,
+or other pseudo-ports. Use man:port-outdated[1], man:port-installed[1], or
+man:port-echo[1] instead.
+
+SEE ALSO
+--------
+man:port[1], man:port-installed[1], man:port-echo[1], man:port-outdated[1]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportlivecheck1fromrev124235trunkbasedocportlivecheck1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-livecheck.1 (from rev 124235, trunk/base/doc/port-livecheck.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-livecheck.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-livecheck.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,68 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-LIVECHECK&quot; &quot;1&quot; &quot;2014\-08\-17&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-livecheck \- Check if a new version of the software is available
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR [\fB\-vd\fR] [\fB\-D\fR \fIportdir\fR] \fBlivecheck\fR
+     [[\fIportname\fR | \fIpseudo\-portname\fR | \fIport\-expressions\fR | \fIport\-url\fR]]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBport livecheck\fR checks whether a newer version of a given port is available upstream\&amp;. It (usually) does that by automatically downloading a web page and applying a regular expression that extracts a version number\&amp;. If the version number is different from the one the port packages, a message is printed\&amp;.
+.sp
+\fBport livecheck\fR is useful for maintainers that want to check whether new versions of their ports are available so they can be updated\&amp;. It can also be used by users that encounter a problem, because updating to the latest upstream version is generally one of the first steps in case of an error of when encountering a bug\&amp;.
+.SH &quot;GLOBAL OPTIONS&quot;
+.sp
+Please see the section \fBGLOBAL OPTIONS\fR in the \fBport\fR(1) man page for a description of global port options\&amp;.
+.PP
+\fB\-v\fR
+.RS 4
+Print a message if the port is up to date\&amp;.
+.RE
+.PP
+\fB\-d\fR
+.RS 4
+Print debugging information such as the regular expression and all matches\&amp;.
+.RE
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1), \fBportfile\fR(7), \fBport-upgrade\fR(7), \m[blue]\fBLivecheck/Distcheck in the MacPorts Guide\fR\m[]\&amp;\s-2\u[1]\d\s+2
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Clemens Lang &lt;cal@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
+.SH &quot;EXTERNAL REFERENCES&quot;
+.IP &quot; 1.&quot; 4
+Livecheck/Distcheck in the MacPorts Guide
+.RS 4
+\%http://guide.macports.org/#reference.livecheck
+.RE
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportlivecheck1txtfromrev124235trunkbasedocportlivecheck1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-livecheck.1.txt (from rev 124235, trunk/base/doc/port-livecheck.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-livecheck.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-livecheck.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,45 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-livecheck(1)
+=================
+$Id$
+
+NAME
+----
+port-livecheck - Check if a new version of the software is available
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* [*-vd*] [*-D* 'portdir'] *livecheck*
+     [['portname' | 'pseudo-portname' | 'port-expressions' | 'port-url']]
+
+DESCRIPTION
+-----------
+*port livecheck* checks whether a newer version of a given port is available
+upstream. It (usually) does that by automatically downloading a web page and
+applying a regular expression that extracts a version number. If the version
+number is different from the one the port packages, a message is printed.
+
+*port livecheck* is useful for maintainers that want to check whether new
+versions of their ports are available so they can be updated. It can also be
+used by users that encounter a problem, because updating to the latest upstream
+version is generally one of the first steps in case of an error of when
+encountering a bug.
+
+include::global-flags.txt[]
+
+*-v*::
+    Print a message if the port is up to date.
+
+*-d*::
+    Print debugging information such as the regular expression and all matches.
+
+SEE ALSO
+--------
+man:port[1], man:portfile[7], man:port-upgrade[7],
+guide:reference.livecheck[Livecheck/Distcheck in the MacPorts Guide]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Clemens Lang &lt;cal@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportlocation1fromrev124235trunkbasedocportlocation1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-location.1 (from rev 124235, trunk/base/doc/port-location.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-location.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-location.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dir.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportlocation1soelimfromrev124235trunkbasedocportlocation1soelim"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-location.1.soelim (from rev 124235, trunk/base/doc/port-location.1.soelim) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-location.1.soelim                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-location.1.soelim        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dir.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportmdmg1fromrev124235trunkbasedocportmdmg1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-mdmg.1 (from rev 124235, trunk/base/doc/port-mdmg.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-mdmg.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-mdmg.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dmg.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportmdmg1soelimfromrev124235trunkbasedocportmdmg1soelim"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-mdmg.1.soelim (from rev 124235, trunk/base/doc/port-mdmg.1.soelim) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-mdmg.1.soelim                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-mdmg.1.soelim        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dmg.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportmpkg1fromrev124235trunkbasedocportmpkg1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-mpkg.1 (from rev 124235, trunk/base/doc/port-mpkg.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-mpkg.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-mpkg.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dmg.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportmpkg1soelimfromrev124235trunkbasedocportmpkg1soelim"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-mpkg.1.soelim (from rev 124235, trunk/base/doc/port-mpkg.1.soelim) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-mpkg.1.soelim                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-mpkg.1.soelim        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dmg.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportpkg1fromrev124235trunkbasedocportpkg1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-pkg.1 (from rev 124235, trunk/base/doc/port-pkg.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-pkg.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-pkg.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dmg.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportpkg1soelimfromrev124235trunkbasedocportpkg1soelim"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-pkg.1.soelim (from rev 124235, trunk/base/doc/port-pkg.1.soelim) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-pkg.1.soelim                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-pkg.1.soelim        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dmg.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportquit1fromrev124235trunkbasedocportquit1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-quit.1 (from rev 124235, trunk/base/doc/port-quit.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-quit.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-quit.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-exit.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportquit1soelimfromrev124235trunkbasedocportquit1soelim"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-quit.1.soelim (from rev 124235, trunk/base/doc/port-quit.1.soelim) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-quit.1.soelim                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-quit.1.soelim        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-exit.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportrdependents1fromrev124235trunkbasedocportrdependents1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-rdependents.1 (from rev 124235, trunk/base/doc/port-rdependents.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-rdependents.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-rdependents.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dependents.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportrdependents1soelimfromrev124235trunkbasedocportrdependents1soelim"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-rdependents.1.soelim (from rev 124235, trunk/base/doc/port-rdependents.1.soelim) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-rdependents.1.soelim                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-rdependents.1.soelim        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dependents.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportreclaim1fromrev124235trunkbasedocportreclaim1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-reclaim.1 (from rev 124235, trunk/base/doc/port-reclaim.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-reclaim.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-reclaim.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,49 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-RECLAIM&quot; &quot;1&quot; &quot;08/20/2014&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-reclaim \- Reclaims disk space\&amp;.
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport\fR [\fB\-vd\fR] \fBreclaim\fR
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBport reclaim\fR will reclaim disk space by uninstalling inactive ports on your system, and removing unneeded or unused installation files\&amp;.
+.SH &quot;GLOBAL OPTIONS&quot;
+.sp
+Please see the section \fBGLOBAL OPTIONS\fR in the \fBport\fR(1) man page for a description of global port options\&amp;.
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1), \fBport-uninstall\fR(1), \fBport-clean\fR(1),
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Kyle Sammons &lt;ksammons@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportreclaim1txtfromrev124235trunkbasedocportreclaim1txt"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-reclaim.1.txt (from rev 124235, trunk/base/doc/port-reclaim.1.txt) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-reclaim.1.txt                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-reclaim.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,29 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-reclaim(1)
+===============
+$Id$
+
+NAME
+----
+port-reclaim -  Reclaims disk space. 
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port* [*-vd*] *reclaim*
+
+DESCRIPTION
+-----------
+*port reclaim* will reclaim disk space by uninstalling inactive ports on your
+system, and removing unneeded or unused installation files.
+
+include::global-flags.txt[]
+
+SEE ALSO
+--------
+man:port[1], man:port-uninstall[1], man:port-clean[1], 
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Kyle Sammons &lt;ksammons@macports.org&gt;
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportrevupgrade1"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-rev-upgrade.1 (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-rev-upgrade.1        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-rev-upgrade.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> '\&quot; t
</span><del>-.TH &quot;PORT\-REV\-UPGRADE&quot; &quot;1&quot; &quot;2014\-08\-03&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</del><ins>+.TH &quot;PORT\-REV\-UPGRADE&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</ins><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="cx"> .\&quot; * Define some portability stuff
</span><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx"> By default, \fBrev\-upgrade\fR is run automatically after each installation or upgrade, unless you pass the \fB\-\-no\-rev\-upgrade\fR option or disable this beahvior in \fBmacports.conf\fR(5) using the \fBrevupgrade_autorun\fR switch\&amp;.
</span><span class="cx"> .SH &quot;OPTIONS&quot;
</span><span class="cx"> .PP
</span><del>-\-\-id\-loadcmd\-check
</del><ins>+\fB\-\-id\-loadcmd\-check\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Check the ID load command in each library installed by MacPorts\&amp;. This load command contains a path that should always reference the library itself, because the path will be copied into all binaries and libraries that link against this library\&amp;. This option verifies that this is the case and will detect incorrect or non\-absolute paths\&amp;. Since this check is only helpful for port maintainers, it is disabled by default\&amp;.
</span><span class="cx"> .RE
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportrevupgrade1txt"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-rev-upgrade.1.txt (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-rev-upgrade.1.txt        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-rev-upgrade.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> OPTIONS
</span><span class="cx"> -------
</span><span class="cx"> 
</span><del>---id-loadcmd-check::
</del><ins>+*--id-loadcmd-check*::
</ins><span class="cx">     Check the ID load command in each library installed by MacPorts. This load
</span><span class="cx">     command contains a path that should always reference the library itself,
</span><span class="cx">     because the path will be copied into all binaries and libraries that link
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportselfupdate1"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-selfupdate.1 (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-selfupdate.1        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-selfupdate.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> '\&quot; t
</span><del>-.TH &quot;PORT\-SELFUPDATE&quot; &quot;1&quot; &quot;2014\-08\-03&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</del><ins>+.TH &quot;PORT\-SELFUPDATE&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</ins><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="cx"> .\&quot; * Define some portability stuff
</span><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="lines">@@ -33,7 +33,7 @@
</span><span class="cx"> You should regularly run \fBselfupdate\fR to update your local port definitions\&amp;. Running \fBselfupdate\fR is required to get updated software with bug fixes and new features\&amp;.
</span><span class="cx"> .SH &quot;OPTIONS&quot;
</span><span class="cx"> .PP
</span><del>-\-\-nosync
</del><ins>+\fB\-\-nosync\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Only check for updates \- and install if available \- for MacPorts itself\&amp;. Do not update the ports tree\&amp;.
</span><span class="cx"> .RE
</span><span class="lines">@@ -41,12 +41,12 @@
</span><span class="cx"> .sp
</span><span class="cx"> Please see the section \fBGLOBAL OPTIONS\fR in the \fBport\fR(1) man page for a description of global port options\&amp;.
</span><span class="cx"> .PP
</span><del>-\-q
</del><ins>+\fB\-q\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Supress status output, be as silent as possible\&amp;.
</span><span class="cx"> .RE
</span><span class="cx"> .PP
</span><del>-\-f
</del><ins>+\fB\-f\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Do not check whether the downloaded MacPorts version is newer than the currently installed one, but always rebuild and reinstall MacPorts\&amp;.
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportselfupdate1txt"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-selfupdate.1.txt (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-selfupdate.1.txt        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-selfupdate.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -26,16 +26,16 @@
</span><span class="cx"> OPTIONS
</span><span class="cx"> -------
</span><span class="cx"> 
</span><del>---nosync::
</del><ins>+*--nosync*::
</ins><span class="cx">     Only check for updates - and install if available - for MacPorts itself. Do
</span><span class="cx">     not update the ports tree.
</span><span class="cx"> 
</span><span class="cx"> include::global-flags.txt[]
</span><span class="cx"> 
</span><del>--q::
</del><ins>+*-q*::
</ins><span class="cx">     Supress status output, be as silent as possible.
</span><span class="cx"> 
</span><del>--f::
</del><ins>+*-f*::
</ins><span class="cx">     Do not check whether the downloaded MacPorts version is newer than the
</span><span class="cx">     currently installed one, but always rebuild and reinstall MacPorts.
</span><span class="cx">     +
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportuninstall1"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-uninstall.1 (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-uninstall.1        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-uninstall.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> '\&quot; t
</span><del>-.TH &quot;PORT\-INSTALL&quot; &quot;1&quot; &quot;2014\-08\-03&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</del><ins>+.TH &quot;PORT\-INSTALL&quot; &quot;1&quot; &quot;2014\-08\-16&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
</ins><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="cx"> .\&quot; * Define some portability stuff
</span><span class="cx"> .\&quot; -----------------------------------------------------------------
</span><span class="lines">@@ -36,17 +36,17 @@
</span><span class="cx"> If multiple versions of the same port are installed, you need to specify a version using the \fB@version\fR syntax\&amp;. Use \fBport installed\fR to find out which versions are currently installed on your system\&amp;. If multiple versions are installed and you did not specify a version, \fBport\fR will output a list\&amp;.
</span><span class="cx"> .SH &quot;OPTIONS&quot;
</span><span class="cx"> .PP
</span><del>-\-\-follow\-dependents
</del><ins>+\fB\-\-follow\-dependents\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Also uninstall all ports recursively depending directly or indirectly on one of the specified ports before uninstalling the port itself\&amp;.
</span><span class="cx"> .RE
</span><span class="cx"> .PP
</span><del>-\-\-follow\-dependencies
</del><ins>+\fB\-\-follow\-dependencies\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Also recursively uninstall all ports that the specified port depends on\&amp;. This will not uninstall dependencies that are marked as requested or that have other dependents\&amp;.
</span><span class="cx"> .RE
</span><span class="cx"> .PP
</span><del>-\-\-no\-exec
</del><ins>+\fB\-\-no\-exec\fR
</ins><span class="cx"> .RS 4
</span><span class="cx"> Do not execute any stored pre\- or post\-uninstall procedures\&amp;.
</span><span class="cx"> .RE
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocportuninstall1txt"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/doc/port-uninstall.1.txt (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-uninstall.1.txt        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/doc/port-uninstall.1.txt        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -28,16 +28,16 @@
</span><span class="cx"> OPTIONS
</span><span class="cx"> -------
</span><span class="cx"> 
</span><del>---follow-dependents::
</del><ins>+*--follow-dependents*::
</ins><span class="cx">     Also uninstall all ports recursively depending directly or indirectly on one
</span><span class="cx">     of the specified ports before uninstalling the port itself.
</span><span class="cx"> 
</span><del>---follow-dependencies::
</del><ins>+*--follow-dependencies*::
</ins><span class="cx">     Also recursively uninstall all ports that the specified port depends on.
</span><span class="cx">     This will not uninstall dependencies that are marked as requested or that
</span><span class="cx">     have other dependents.
</span><span class="cx"> 
</span><del>---no-exec::
</del><ins>+*--no-exec*::
</ins><span class="cx">     Do not execute any stored pre- or post-uninstall procedures.
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesgsoc14interactivebasedocporturl1fromrev124235trunkbasedocporturl1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-url.1 (from rev 124235, trunk/base/doc/port-url.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-url.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-url.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dir.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocporturl1soelimfromrev124235trunkbasedocporturl1soelim"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-url.1.soelim (from rev 124235, trunk/base/doc/port-url.1.soelim) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-url.1.soelim                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-url.1.soelim        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dir.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportwork1fromrev124235trunkbasedocportwork1"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-work.1 (from rev 124235, trunk/base/doc/port-work.1) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-work.1                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-work.1        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dir.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasedocportwork1soelimfromrev124235trunkbasedocportwork1soelim"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/doc/port-work.1.soelim (from rev 124235, trunk/base/doc/port-work.1.soelim) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/doc/port-work.1.soelim                                (rev 0)
+++ branches/gsoc14-interactive/base/doc/port-work.1.soelim        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+.so man1/port-dir.1
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasesrcdarwintracelib10darwintracec"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/src/darwintracelib1.0/darwintrace.c (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/darwintracelib1.0/darwintrace.c        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/src/darwintracelib1.0/darwintrace.c        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -37,6 +37,7 @@
</span><span class="cx"> 
</span><span class="cx"> #define DARWINTRACE_USE_PRIVATE_API 1
</span><span class="cx"> #include &quot;darwintrace.h&quot;
</span><ins>+#include &quot;sandbox_actions.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #ifdef HAVE_LIBKERN_OSATOMIC_H
</span><span class="cx"> #include &lt;libkern/OSAtomic.h&gt;
</span><span class="lines">@@ -127,15 +128,10 @@
</span><span class="cx">  *  0: allow
</span><span class="cx">  *  1: map the path to the one given in additional_data (currently unsupported)
</span><span class="cx">  *  2: check for a dependency using the socket
</span><ins>+ *  3: deny access to the path and stop processing
</ins><span class="cx">  */
</span><span class="cx"> static char *filemap;
</span><span class="cx"> 
</span><del>-enum {
-    FILEMAP_ALLOW = 0,
-    // FILEMAP_REDIR = 1,
-    FILEMAP_ASK   = 2
-};
-
</del><span class="cx"> /**
</span><span class="cx">  * Setup method called as constructor to set up thread-local storage for the
</span><span class="cx">  * thread id and the darwintrace socket.
</span><span class="lines">@@ -661,7 +657,7 @@
</span><span class="cx">                                                         // access anyway, but report a sandbox violation.
</span><span class="cx">                                                         // TODO find a better solution
</span><span class="cx">                                                         if ((flags &amp; DT_REPORT) &gt; 0) {
</span><del>-                                                                __darwintrace_log_op(&quot;sandbox_violation&quot;, path);
</del><ins>+                                                                __darwintrace_log_op(&quot;sandbox_unknown&quot;, path);
</ins><span class="cx">                                                         }
</span><span class="cx">                                                         return true;
</span><span class="cx">                                                 case 0:
</span><span class="lines">@@ -671,6 +667,11 @@
</span><span class="cx">                                                         }
</span><span class="cx">                                                         return false;
</span><span class="cx">                                         }
</span><ins>+                                case FILEMAP_DENY:
+                                        if ((flags &amp; DT_REPORT) &gt; 0) {
+                                                __darwintrace_log_op(&quot;sandbox_violation&quot;, path);
+                                        }
+                                        return false;
</ins><span class="cx">                                 default:
</span><span class="cx">                                         fprintf(stderr, &quot;darwintrace: error: unexpected byte in file map: `%x'\n&quot;, *t);
</span><span class="cx">                                         abort();
</span></span></pre></div>
<a id="branchesgsoc14interactivebasesrcdarwintracelib10procc"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/src/darwintracelib1.0/proc.c (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/darwintracelib1.0/proc.c        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/src/darwintracelib1.0/proc.c        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -91,7 +91,7 @@
</span><span class="cx">                 if (NULL != (val = getenv(#name))) {\
</span><span class="cx">                         size_t lenName = strlen(#name);\
</span><span class="cx">                         size_t lenVal  = strlen(val);\
</span><del>-                        if (NULL == (variable = malloc(lenName + lenVal + 0 + 1))) {\
</del><ins>+                        if (NULL == (variable = malloc(lenName + 1 + lenVal + 1))) {\
</ins><span class="cx">                                 perror(&quot;darwintrace: malloc&quot;);\
</span><span class="cx">                                 abort();\
</span><span class="cx">                         }\
</span></span></pre></div>
<a id="branchesgsoc14interactivebasesrcdarwintracelib10sandbox_actionshfromrev124235trunkbasesrcdarwintracelib10sandbox_actionsh"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/src/darwintracelib1.0/sandbox_actions.h (from rev 124235, trunk/base/src/darwintracelib1.0/sandbox_actions.h) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/darwintracelib1.0/sandbox_actions.h                                (rev 0)
+++ branches/gsoc14-interactive/base/src/darwintracelib1.0/sandbox_actions.h        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,41 @@
</span><ins>+/*
+ * Copyright (c) 2014 The MacPorts Project
+ * All rights reserved.
+ *
+ * $Id$
+ *
+ * @APPLE_BSD_LICENSE_HEADER_START@
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Inc. (&quot;Apple&quot;) nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @APPLE_BSD_LICENSE_HEADER_END@
+ */
+
+enum {
+    FILEMAP_ALLOW = 0,
+    // FILEMAP_REDIR = 1,
+    FILEMAP_ASK   = 2,
+    FILEMAP_DENY  = 3
+};
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasesrcmacports10Makefilein"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/src/macports1.0/Makefile.in (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/macports1.0/Makefile.in        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/src/macports1.0/Makefile.in        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> include ../../Mk/macports.autoconf.mk
</span><span class="cx"> 
</span><span class="cx"> SRCS=                macports.tcl macports_dlist.tcl macports_util.tcl \
</span><del>-                macports_autoconf.tcl
</del><ins>+                macports_autoconf.tcl doctor.tcl reclaim.tcl
</ins><span class="cx"> OBJS=                macports.o get_systemconfiguration_proxies.o sysctl.o
</span><span class="cx"> SHLIB_NAME=        MacPorts${SHLIB_SUFFIX}
</span><span class="cx"> 
</span></span></pre></div>
<a id="branchesgsoc14interactivebasesrcmacports10doctortclfromrev124235trunkbasesrcmacports10doctortcl"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/src/macports1.0/doctor.tcl (from rev 124235, trunk/base/src/macports1.0/doctor.tcl) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/macports1.0/doctor.tcl                                (rev 0)
+++ branches/gsoc14-interactive/base/src/macports1.0/doctor.tcl        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,742 @@
</span><ins>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
+# doctor.tcl
+# $Id: doctor.tcl 119177 2014-04-18 22:35:29Z cal@macports.org $
+#
+# Copyright (c) 2002 - 2003 Apple Inc.
+# Copyright (c) 2004 - 2005 Paul Guyot, &lt;pguyot@kallisys.net&gt;.
+# Copyright (c) 2004 - 2006 Ole Guldberg Jensen &lt;olegb@opendarwin.org&gt;.
+# Copyright (c) 2004 - 2005 Robert Shaw &lt;rshaw@opendarwin.org&gt;
+# Copyright (c) 2004 - 2014 The MacPorts Project
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. Neither the name of Apple Inc. nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Todo:
+
+# Done:
+# Add -q for quiet mode, where we don't print anything
+# Check for command line tools
+# Check for any DYLD_* environmental variables
+# Check for '.la' in dylib and '.prl'
+# Check if installed files are readable 
+# Check for sqlite
+# Check for openssl
+# Crowd-source more ideas from the mailing-list
+# Check if $PATH is first
+# Check for issues with compilation. Compile small, simple file, check for &quot;couldn't create cache file&quot;
+# check_for_stray_developer_directory
+# Check for *.h, *.hpp, *.hxx in /usr/local/include
+# Check for *.dylib in /usr/local/lib
+# Check for other package managers. Fink = /sw, homebrew = /usr/local/Cellar
+# Check for all files installed by ports exists
+# Check for archives from all ports exists
+# Check for things in /usr/local
+# Check for x11.app if the OS is 10.6 and suggest installing xorg-server or the site on macosforge
+# Add error catching for line's without an equals sign. 
+# Support comments for the parser
+# Check for amount of drive space
+# Move port_doctor.ini to the port tree, below _resources 
+# Check for curl
+# Check for rsync
+# Check if macports is in /opt/local
+
+
+package provide doctor 1.0 
+
+package require macports
+package require reclaim 1.0
+
+namespace eval doctor {
+
+    # Command line argument that determines whether or not to output things fancily. 
+    variable quiet 0
+    
+    proc main {opts} {
+        
+        # The main function. Handles all the calls to the correct functions, and sets the config_options array, 
+        # as well as the parser_options array.
+        #
+        # Args:
+        #           opts - The options passed in. Currently the only option availible is 'quiet'. 
+        # Returns:
+        #           None
+
+        # Setting the 'quiet' variable based on what was passed in.
+        if {$opts ne &quot;&quot;} {
+            set doctor::quiet 1
+        } else {
+            set doctor::quiet 0
+        }
+
+        array set config_options    [list]
+        set parser_options          {&quot;macports_location&quot; &quot;profile_path&quot; &quot;shell_location&quot; &quot;xcode_version_10.10&quot; &quot;xcode_version_10.9&quot; &quot;xcode_version_10.8&quot; \
+                                    &quot;xcode_version_10.7&quot; &quot;xcode_version_10.6&quot; &quot;xcode_version_10.7&quot; &quot;xcode_version_10.6&quot; &quot;xcode_version_10.5&quot; \
+                                    &quot;xcode_version_10.4&quot; &quot;xcode_build&quot;}
+
+        set user_config_path        ${macports::portdbpath}/port_doctor.ini
+        set xcode_config_path       [macports::getdefaultportresourcepath &quot;macports1.0/xcode_versions.ini&quot;] 
+
+        # Make sure at least a default copy of the xcode and user config exist
+        make_xcode_config $xcode_config_path
+        make_user_config  $user_config_path
+
+        # Read the config files
+        get_config config_options $parser_options $user_config_path 
+        get_config config_options $parser_options $xcode_config_path 
+
+        # Start the checks
+        check_path $config_options(macports_location) $config_options(profile_path) $config_options(shell_location)
+        check_xcode config_options
+        check_for_app curl
+        check_for_app rsync
+        check_for_app openssl
+        check_for_app sqlite3
+        check_macports_location
+        check_free_space
+        check_for_x11
+        check_for_files_in_usr_local 
+        check_tarballs 
+        check_port_files 
+        check_for_package_managers
+        check_for_stray_developer_directory
+        check_compilation_error_cache
+        check_for_dyld
+        check_for_clt
+    }
+
+    proc check_for_clt {} {
+
+        # Checks to see if the Xcode Command Line Tools are installed by checking if the file
+        # /Library/Developer/CommandLineTools exists if the system is running 10.9, or if they're
+        # running an older version, if the command xcode-select -p outputs something.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;command line tools&quot;
+
+        set version ${macports::macosx_version}
+
+        if {$version == 10.9} {
+
+            if {![file exists &quot;/Library/Developer/CommandLineTools/&quot;]} {
+
+                ui_warn &quot;Xcode Command Line Tools are not installed! To install them, please enter the command:
+                                    xcode-select --install&quot;
+                success_fail 0
+                return
+            }
+            success_fail 1
+            return
+
+        } else {
+
+            set xcode_select [exec xcode-select -p]
+
+            if {$xcode_select eq &quot;&quot;} {
+
+                ui_warn &quot;Xcode Command Line Tools are not installed! To install them, please enter the command:
+                                    xcode-selct --install&quot;
+                success_fail 0
+                return
+            }
+            success_fail 1
+        }
+    }
+
+    proc check_for_dyld {} {
+
+        # Checks to see if the current MacPorts session is running with a DYLD_* environmental 
+        # variable set.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;DYLD_* environmental variables&quot;
+
+        set printenv        [exec printenv]
+        set split           [split $printenv]
+
+        if {[regexp {DYLD_.} $split]} {
+            ui_warn &quot;found a DYLD_* environmental variable. These are known to cause issues with MacPorts. Please\
+                     unset the variable for the duration MacPorts is running.&quot;
+
+            success_fail 0
+            return
+        }
+
+        success_fail 1
+   }
+
+    proc output {string} {
+        
+        # Outputs the given string formatted correctly.
+        #
+        # Args:
+        #           string - The string to be output 
+        # Returns:
+        #           None
+
+        if {${doctor::quiet} == 0} {
+            ui_msg -nonewline &quot;Checking for $string... &quot;
+        }
+    }
+
+    proc success_fail {result} {
+
+        # Either outputs a [SUCCESS] or [FAILED], depending on the result.
+        #
+        # Args:
+        #           result - An integer value. 1 = [SUCCESS], anything else = [FAILED]
+        # Returns:
+        #           None
+
+        if {${doctor::quiet} eq 0} {
+
+            if {$result == 1} {
+
+                ui_msg &quot;\[SUCCESS\]&quot;
+                return
+            }
+
+            ui_msg &quot;\[FAILED\]&quot;
+        }
+    }
+
+    proc check_compilation_error_cache {} {
+
+        # Checks to see if the compiler can compile properly, or it throws the error, &quot;couldn't create cache file&quot;.
+        #
+        # Args: 
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;compilation errors&quot;
+
+        set filename    &quot;test.c&quot;
+        set fd          [open $filename w]
+        
+        puts $fd &quot;int main() { return 0; }&quot;
+        close $fd
+
+        set output      [exec clang $filename -o main_test]
+
+        file delete $filename
+        file delete &quot;main_test&quot;
+
+        if {&quot;couldn't create cache file&quot; in $output} {
+            ui_warn &quot;found errors when attempting to compile file. To fix this issue, delete your tmp folder using:
+                       rm -rf \$TMPDIR&quot;
+            success_fail 0 
+            return
+        }
+
+        success_fail 1 
+       
+    }
+
+    proc check_for_stray_developer_directory {} {
+
+        # Checks to see if the script to remove leftover files from Xcode has been run or not. Implementation heavily influenced
+        # by Homebrew implementation. 
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;stray developer directory&quot;
+        
+        set uninstaller &quot;/Developer/Library/uninstall-developer-folder&quot;
+        
+        if {${macports::xcodeversion} &gt;= 4.3 &amp;&amp; [file exists $uninstaller]} { 
+            ui_warn &quot;you have leftover files from an older version of Xcode. You should delete them by using, $uninstaller&quot;
+
+            success_fail 0 
+            return
+        } 
+
+        success_fail 1 
+    }
+
+    proc check_for_package_managers {} {
+
+        # Checks to see if either Fink or Homebrew are installed on the system. If they are, it warns them and suggest they uninstall
+        # or move them to a different location.
+        # 
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;HomeBrew&quot;
+        
+        if {[file exists &quot;/usr/local/Cellar&quot;]} {
+            ui_warn &quot;it seems you have Homebrew installed on this system -- Because Homebrew uses /usr/local, this can potentially cause issues \
+                     with MacPorts. We'd recommend you either uninstall it, or move it from /usr/local for now.&quot;
+
+            success_fail 0
+
+        } else {
+
+            success_fail 1
+        }
+
+        output &quot;Fink&quot;
+        if {[file exists &quot;/sw&quot;]} {
+            ui_warn &quot;it seems you have Fink installed on your system -- This could potentially cause issues with MacPorts. We'd recommend you'd \
+                     either uninstall it, or move it from /sw for now.&quot;
+
+            success_fail 0

+        } else {
+
+            success_fail 1
+        }
+    }
+
+    proc check_port_files {} {
+        
+        # Checks to see if each file installed by all active and installed ports actually exists on the filesystem. If not, it warns
+        # the user and suggests the user deactivate and reactivate the port.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+
+        set apps [reclaim::get_info]
+
+        array set activeApps {}
+        set totalFiles 0
+
+        foreach app $apps {
+
+            set name    [lindex $app 0]
+            set active  [lindex $app 4]
+            set files   [registry::port_registered $name]
+
+            if {$active} {
+                set activeApps($name) $files
+                incr totalFiles [llength $files]
+            }
+        }
+
+        set fancyOutput [expr {![macports::ui_isset ports_debug] &amp;&amp; ![macports::ui_isset ports_verbose] &amp;&amp; [info exists macports::ui_options(progress_generic)] \
+                                &amp;&amp; ${doctor::quiet} == 0}]
+
+        if {$fancyOutput} {
+            set progress $macports::ui_options(progress_generic)
+        }
+
+        if {$totalFiles &gt; 0} {
+            if {$fancyOutput} {
+                output &quot;files installed by ports on disk&quot;
+                if {${doctor::quiet} == 0} {
+                    # we need a newline here or the progress bar will overwrite the line
+                    ui_msg &quot;&quot;
+                }
+                $progress start
+            }
+
+            set currentFile 1
+            foreach name [lsort [array names activeApps]] {
+                foreach file $activeApps($name) {
+                    if {$fancyOutput} {
+                        $progress update $currentFile $totalFiles
+                    } else {
+                        output &quot;file '$file' on disk&quot;
+                    }
+
+                    if {![file exists $file]} {
+                        if {$fancyOutput} {
+                            $progress intermission
+                        } else {
+                            success_fail 0
+                        }
+
+                        if {[catch {file lstat $file _}]} {
+                            ui_warn &quot;couldn't find file '$file' for port '$name'. Please deactivate and reactivate the port to fix this issue.&quot;
+                        }
+                    } elseif {![file readable $file]} {
+                        if {$fancyOutput} {
+                            $progress intermission
+                        } else {
+                            success_fail 0
+                        }
+
+                        ui_warn &quot;'$file' installed by port '$name' is currently not readable. Please try again. If this problem persists, please contact the mailing list.&quot;
+                    } elseif {!$fancyOutput} {
+                        success_fail 1
+                    }
+
+                    incr currentFile
+                }
+            }
+
+            if {$fancyOutput} {
+                $progress finish
+            }
+        }
+    }
+
+    proc check_tarballs {} {
+
+        # Checks if the archives for each installed port in /opt/local/var/macports/software/$name is actually in there. If not, it warns
+        # the user and suggest a reinstallation of the port. 
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        set apps [reclaim::get_info]
+
+        foreach app $apps {
+
+
+            set name        [lindex $app 0]
+            set version     [lindex $app 1]
+            set revision    [lindex $app 2]
+            set variants    [lindex $app 3]
+            set epoch       [lindex $app 5]
+
+            output &quot;'${name} @${version}_${revision}${variants}'s tarball on disk&quot;
+
+            set ref         [registry::open_entry $name $version $revision $variants $epoch]
+            set image_dir   [registry::property_retrieve $ref location]
+
+            if {![file exists $image_dir]} {
+                ui_warn &quot;couldn't find the archive for '$name'. Please uninstall and reinstall this application.&quot;
+                success_fail 0
+            } else {
+                success_fail 1
+            }
+        }
+    }
+
+    proc check_for_files_in_usr_local {} {
+
+        # Checks for dylibs in /usr/local/lib and header files in /usr/local/include, and warns the user about said files if they 
+        # are found.
+        # 
+        # Args:
+        #           None 
+        # Returns:
+        #           None
+
+        output &quot;dylibs in /usr/local/lib&quot;
+
+        if {[glob -nocomplain -directory &quot;/usr/local/lib&quot; *.dylib *.la *.prl] ne &quot;&quot;} {
+            ui_warn &quot;found dylib's in your /usr/local/lib directory. These are known to cause problems. We'd recommend \
+                     you remove them.&quot;
+
+            success_fail 0
+
+        } else {
+
+            success_fail 1
+        }
+
+        output &quot;header files in /usr/local/include&quot;
+
+        if {[glob -nocomplain -directory &quot;/usr/local/include&quot; *.h *.hpp *.hxx] ne &quot;&quot;} {
+            ui_warn &quot;found header files in your /usr/local/include directory. These are known to cause problems. We'd recommend \
+                     you remove them.&quot;
+
+            success_fail 0
+
+        } else {
+
+            success_fail 1
+        }
+    }
+
+    proc check_for_x11 {} {
+
+        # Checks to see if the user is using the X11.app, and if they're on 10.6. If they are, it alerts them about it.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;X11.app on OS X 10.6 systems&quot;
+
+        set mac_version ${macports::macosx_version}
+
+        if {$mac_version == 10.6} {
+
+            if {[file exists /Applications/X11.app]} {
+                ui_error &quot;it seems you have Mac OSX 10.6 installed, and are using X11 from \&quot;X11.app\&quot;. This has been known to cause issues. \
+                         To fix this, please install xorg-server, by using the command 'sudo port install xorg-server', or installing it from \
+                         their website, http://xquartz.macosforge.org/trac/wiki/Releases.&quot;
+
+                success_fail 0
+                return
+            }
+        }
+
+        success_fail 1
+    }
+
+    proc check_free_space {} {
+
+        # Checks to see if the user has less than 5 gigs of space left, and warns if they don't.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;free disk space&quot;
+
+        set output          [exec df -g]
+        set tokens          [split $output \n]
+        set disk_info       [lindex $tokens 1]
+        set availible       [lindex $disk_info 3]
+
+        if {$availible &lt; 5} {
+            ui_warn &quot;you have less than 5 gigabytes free on your machine! This can cause serious errors. We recommend trying to clear out unnecessary \
+                     programs and files by running 'sudo port reclaim', or manually uninstalling/deleting programs and folders on your drive.&quot;
+
+            success_fail 0
+            return
+        }
+
+        success_fail 1
+    }
+
+    proc check_macports_location {} {
+
+        # Checks to see if port is where it should be. If it isn't, freak the frick out.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;MacPort's location&quot;
+
+        if {[file exists ${macports::prefix}/bin/port] == 0} {
+            ui_error &quot;port was not in ${macports::prefix}/bin. This can potentially cause errors. It's recommended you move it back to ${macports::prefix}/bin.&quot;
+            success_fail 0
+            return
+        }
+
+        success_fail 1
+   }
+
+    proc check_for_app {app} {
+
+        # Check's if the binary supplied exists in /usr/bin. If it doesn't, it warns the user. 
+        #
+        # Args:
+        #           app - The name of the app to check for.
+        # Returns
+        #           None
+
+        output &quot;for '$app'&quot;
+
+        if {[file exists /usr/bin/$app] == 0} {
+            ui_error &quot;$app is needed by MacPorts to function normally, but wasn't found on this system. We'd recommend \
+                      installing it for continued use of MacPorts.&quot; 
+            success_fail 0
+            return
+        }
+
+        success_fail 1
+    }
+
+    proc check_xcode {config_options} {
+        
+        # Checks to see if the currently installed version of Xcode works with the curent OS version.
+        # 
+        # Args:
+        #           config_options - The associative array containing all options in the config files
+        # Returns:
+        #           None
+
+        output &quot;correct Xcode version&quot;
+
+        upvar $config_options config 
+
+        set mac_version     ${macports::macosx_version}
+        set xcode_current   ${macports::xcodeversion} 
+        set xcode_versions  $config(xcode_version_$mac_version)
+
+        if {$xcode_current in $xcode_versions} {
+            success_fail 1
+            return
+        
+        } else {
+            ui_error &quot;currently installed version of Xcode, $xcode_current, is not supported by MacPorts. \
+                      For your currently installed system, only the following versions of Xcode are supported: \
+                      $xcode_versions&quot;
+            success_fail 0
+        }
+    }
+
+    proc make_xcode_config {path} {
+        
+        # Checks to see if xcode_versions.ini exists. If it does, it returns. If it doesn't, then it creats a defult config file.
+        # 
+        # Args: 
+        #           None
+        # Returns:
+        #           None
+
+        if {[file exists $path] == 0} {
+            ui_error &quot;No configuration file found at $path. Please run, 
+                        \&quot;port selfupdate\&quot;&quot;
+            exit
+            
+        }
+    }
+     
+    proc make_user_config {path} {
+
+        # Builds a config file for the user using all default parameters if needed.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        if {[file exists $path] == 0} {
+
+            ui_warn &quot;No configuration file found at $path. Creating generic config file.&quot;
+           
+            set fd      [open $path w]
+            puts $fd &quot;macports_location=${macports::prefix}&quot;
+            puts $fd &quot;profile_path=${macports::user_home}/.bash_profile&quot;
+            puts $fd &quot;shell_location=/bin/bash&quot;
+           
+            close $fd
+        }
+   }
+
+    proc get_config {config_options parser_options path} {
+
+        # Reads in and parses the configuration file passed in to $path. After parsing, all variables found are assigned 
+        # in the 'config_options' associative array. 
+        #
+        # Args:
+        #           config_options - The associative array responsible for holding all the configuration options.
+        #           parser_options - The list responsible for holding each option to set/look for in the configuration file.
+        #           path           - The path to the correct config_file
+        # Returns:
+        #           None. 
+
+        upvar $config_options config 
+
+        set fd   [open $path r]
+        set text [read $fd]
+        set data [split $text &quot;\n&quot;]
+
+        close $fd
+
+        foreach line $data { 
+
+            # Ignore comments
+            if {[string index $line 0] eq &quot;#&quot; } {
+                continue
+            }
+
+            #The tokens
+            set tokens [split $line &quot;=&quot;]
+
+            # Only care about things that are in $parser_options
+            if {[lindex $tokens 0] in $parser_options} {
+                set config([lindex $tokens 0]) [lindex $tokens 1]
+            
+            # Ignore whitespace
+            } elseif {[lindex $tokens 0] eq &quot;&quot;} {
+                continue
+
+            } else {
+                ui_error &quot;unrecognized config option in file $path: [lindex $tokens 0]&quot;
+            }
+        }
+    }
+
+    proc check_path {port_loc profile_path shell_loc} {
+
+        # Checks to see if port_location/bin and port_location/sbin are in the environmental $PATH variable.
+        # If they aren't, it appends it to the correct shell's profile file.
+        #
+        # Args:
+        #           port_loc        - The location of port (as set in the config file)
+        #           profile_path    - The location of the profile file (as set in the config file)
+        #           shell_loc       - The location of the shell binary (as set in the config file)
+        # Returns:
+        #           None.
+
+        set path ${macports::user_path}
+        set split [split $path :]
+
+        if {&quot;$port_loc/bin&quot; in $split &amp;&amp; &quot;$port_loc/sbin&quot; in $split } {
+
+            if {[lindex $split 0] != &quot;$port_loc/bin&quot;} {
+                ui_warn &quot;$port_loc/bin is not first in your PATH environmental variable.  This may or may not \
+                         cause problems in the future.&quot;
+            }
+            return
+
+        } else {
+            ui_warn &quot;your environmental \$PATH variable does not currently include, $port_loc/bin, which is where port is located. \
+                     Would you like to add $port_loc/bin to your \$PATH variable now? \[Y/N\]&quot;
+            set input [gets stdin]
+
+            if {$input == &quot;y&quot; || $input == &quot;Y&quot;} {
+                ui_msg &quot;Attempting to add $port_loc/bin to $profile_path&quot;
+
+                if {[file exists $profile_path] == 1} {
+                    set fd [open $profile_path a]
+
+                } else {
+                    ui_error &quot;$profile_path does not exist.&quot;
+                }
+
+                puts $fd &quot;export PATH=$port_loc/bin:$port_loc/sbin:\$PATH&quot;
+                close $fd
+
+                ui_msg &quot;Added PATH properly. Please execute, 'source $profile_path' in a new terminal window.&quot;
+
+            } elseif {$input == &quot;n&quot; || $input == &quot;N&quot;} {    
+                ui_msg &quot;Not fixing your \$PATH variable.&quot;
+
+            } else {
+                ui_msg &quot;Not a valid choice: $input&quot;
+            }
+       }
+   }
+}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasesrcmacports10macportstcl"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/src/macports1.0/macports.tcl (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/macports1.0/macports.tcl        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/src/macports1.0/macports.tcl        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -36,6 +36,8 @@
</span><span class="cx"> package provide macports 1.0
</span><span class="cx"> package require macports_dlist 1.0
</span><span class="cx"> package require macports_util 1.0
</span><ins>+package require doctor 1.0
+package require reclaim 1.0
</ins><span class="cx"> package require Tclx
</span><span class="cx"> 
</span><span class="cx"> namespace eval macports {
</span><span class="lines">@@ -55,7 +57,7 @@
</span><span class="cx">     variable user_options {}
</span><span class="cx">     variable portinterp_options &quot;\
</span><span class="cx">         portdbpath porturl portpath portbuildpath auto_path prefix prefix_frozen portsharepath \
</span><del>-        registry.path registry.format user_home \
</del><ins>+        registry.path registry.format user_home user_path \
</ins><span class="cx">         portarchivetype archivefetch_pubkeys portautoclean porttrace keeplogs portverbose destroot_umask \
</span><span class="cx">         rsync_server rsync_options rsync_dir startupitem_type startupitem_install place_worksymlink macportsuser \
</span><span class="cx">         configureccache ccache_dir ccache_size configuredistcc configurepipe buildnicevalue buildmakejobs \
</span><span class="lines">@@ -658,6 +660,9 @@
</span><span class="cx">         set macports::user_home /dev/null/NO_HOME_DIR
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    # Save the path for future processing
+    set macports::user_path $env(PATH)
+
</ins><span class="cx">     # Configure the search path for configuration files
</span><span class="cx">     set conf_files {}
</span><span class="cx">     lappend conf_files ${macports_conf_path}/macports.conf
</span><span class="lines">@@ -1189,6 +1194,9 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    # Check the last time 'reclaim' was run
+    macports::check_last_reclaim
+
</ins><span class="cx">     # init registry
</span><span class="cx">     set db_path [file join ${registry.path} registry registry.db]
</span><span class="cx">     set db_exists [file exists $db_path]
</span><span class="lines">@@ -2142,6 +2150,9 @@
</span><span class="cx">     set required_archs [$workername eval get_canonical_archs]
</span><span class="cx">     set depends_skip_archcheck [_mportkey $mport depends_skip_archcheck]
</span><span class="cx"> 
</span><ins>+    # Pluralize &quot;arch&quot; appropriately.
+    set s [expr {[llength $required_archs] == 1 ? &quot;&quot; : &quot;s&quot;}]
+
</ins><span class="cx">     set test _portnameactive
</span><span class="cx"> 
</span><span class="cx">     foreach deptype $deptypes {
</span><span class="lines">@@ -2184,7 +2195,7 @@
</span><span class="cx">                                     }
</span><span class="cx">                                 }
</span><span class="cx">                                 if {[llength $missing] &gt; 0} {
</span><del>-                                    ui_error &quot;Cannot install [_mportkey $mport subport] for the arch(s) '$required_archs' because&quot;
</del><ins>+                                    ui_error &quot;Cannot install [_mportkey $mport subport] for the arch${s} '$required_archs' because&quot;
</ins><span class="cx">                                     ui_error &quot;its dependency $dep_portname is only installed for the arch '$active_archs'&quot;
</span><span class="cx">                                     ui_error &quot;and the configured universal_archs '$macports::universal_archs' are not sufficient.&quot;
</span><span class="cx">                                     return -code error &quot;architecture mismatch&quot;
</span><span class="lines">@@ -2196,12 +2207,12 @@
</span><span class="cx">                                 }
</span><span class="cx">                             } else {
</span><span class="cx">                                 # already universal
</span><del>-                                ui_error &quot;Cannot install [_mportkey $mport subport] for the arch(s) '$required_archs' because&quot;
</del><ins>+                                ui_error &quot;Cannot install [_mportkey $mport subport] for the arch${s} '$required_archs' because&quot;
</ins><span class="cx">                                 ui_error &quot;its dependency $dep_portname is only installed for the archs '$active_archs'.&quot;
</span><span class="cx">                                 return -code error &quot;architecture mismatch&quot;
</span><span class="cx">                             }
</span><span class="cx">                         } else {
</span><del>-                            ui_error &quot;Cannot install [_mportkey $mport subport] for the arch(s) '$required_archs' because&quot;
</del><ins>+                            ui_error &quot;Cannot install [_mportkey $mport subport] for the arch${s} '$required_archs' because&quot;
</ins><span class="cx">                             ui_error &quot;its dependency $dep_portname is only installed for the arch '$active_archs'&quot;
</span><span class="cx">                             ui_error &quot;and does not have a universal variant.&quot;
</span><span class="cx">                             return -code error &quot;architecture mismatch&quot;
</span><span class="lines">@@ -2315,7 +2326,7 @@
</span><span class="cx">             ui_debug &quot;Skipping $source&quot;
</span><span class="cx">             continue
</span><span class="cx">         }
</span><del>-        set needs_portindex 0
</del><ins>+        set needs_portindex false
</ins><span class="cx">         ui_info &quot;Synchronizing local ports tree from $source&quot;
</span><span class="cx">         switch -regexp -- [macports::getprotocol $source] {
</span><span class="cx">             {^file$} {
</span><span class="lines">@@ -2330,24 +2341,32 @@
</span><span class="cx">                     if {
</span><span class="cx">                         [catch {
</span><span class="cx">                             if {[getuid] == 0} {
</span><del>-                                set euid [geteuid]
-                                set egid [getegid]
-                                ui_debug &quot;changing euid/egid - current euid: $euid - current egid: $egid&quot;
-                                setegid [name_to_gid [file attributes $portdir -group]]
-                                seteuid [name_to_uid [file attributes $portdir -owner]]
</del><ins>+                                # Must change egid before dropping root euid.
+                                set old_egid [getegid]
+                                set new_egid [name_to_gid [file attributes $portdir -group]]
+                                setegid $new_egid
+                                ui_debug &quot;Changed effective group ID from $old_egid to $new_egid&quot;
+                                set old_euid [geteuid]
+                                set new_euid [name_to_uid [file attributes $portdir -owner]]
+                                seteuid $new_euid
+                                ui_debug &quot;Changed effective user ID from $old_euid to $new_euid&quot;
</ins><span class="cx">                             }
</span><span class="cx">                             system $svn_commandline
</span><span class="cx">                             if {[getuid] == 0} {
</span><del>-                                seteuid $euid
-                                setegid $egid
</del><ins>+                                seteuid $old_euid
+                                ui_debug &quot;Changed effective user ID from $new_euid to $old_euid&quot;
+                                setegid $old_egid
+                                ui_debug &quot;Changed effective group ID from $new_egid to $old_egid&quot;
</ins><span class="cx">                             }
</span><span class="cx">                         }]
</span><span class="cx">                     } {
</span><span class="cx">                         ui_debug $::errorInfo
</span><span class="cx">                         ui_error &quot;Synchronization of the local ports tree failed doing an svn update&quot;
</span><span class="cx">                         if {[getuid] == 0} {
</span><del>-                            seteuid $euid
-                            setegid $egid
</del><ins>+                            seteuid $old_euid
+                            ui_debug &quot;Changed effective user ID from $new_euid to $old_euid&quot;
+                            setegid $old_egid
+                            ui_debug &quot;Changed effective group ID from $new_egid to $old_egid&quot;
</ins><span class="cx">                         }
</span><span class="cx">                         incr numfailed
</span><span class="cx">                         continue
</span><span class="lines">@@ -2364,30 +2383,38 @@
</span><span class="cx">                     if {
</span><span class="cx">                         [catch {
</span><span class="cx">                             if {[getuid] == 0} {
</span><del>-                                set euid [geteuid]
-                                set egid [getegid]
-                                ui_debug &quot;changing euid/egid - current euid: $euid - current egid: $egid&quot;
-                                setegid [name_to_gid [file attributes $portdir -group]]
-                                seteuid [name_to_uid [file attributes $portdir -owner]]
</del><ins>+                                # Must change egid before dropping root euid.
+                                set old_egid [getegid]
+                                set new_egid [name_to_gid [file attributes $portdir -group]]
+                                setegid $new_egid
+                                ui_debug &quot;Changed effective group ID from $old_egid to $new_egid&quot;
+                                set old_euid [geteuid]
+                                set new_euid [name_to_uid [file attributes $portdir -owner]]
+                                seteuid $new_euid
+                                ui_debug &quot;Changed effective user ID from $old_euid to $new_euid&quot;
</ins><span class="cx">                             }
</span><span class="cx">                             system $git_commandline
</span><span class="cx">                             if {[getuid] == 0} {
</span><del>-                                seteuid $euid
-                                setegid $egid
</del><ins>+                                seteuid $old_euid
+                                ui_debug &quot;Changed effective user ID from $new_euid to $old_euid&quot;
+                                setegid $old_egid
+                                ui_debug &quot;Changed effective group ID from $new_egid to $old_egid&quot;
</ins><span class="cx">                             }
</span><span class="cx">                         }]
</span><span class="cx">                     } {
</span><span class="cx">                         ui_debug $::errorInfo
</span><span class="cx">                         ui_error &quot;Synchronization of the local ports tree failed doing a git update&quot;
</span><span class="cx">                         if {[getuid] == 0} {
</span><del>-                            seteuid $euid
-                            setegid $egid
</del><ins>+                            seteuid $old_euid
+                            ui_debug &quot;Changed effective user ID from $new_euid to $old_euid&quot;
+                            setegid $old_egid
+                            ui_debug &quot;Changed effective group ID from $new_egid to $old_egid&quot;
</ins><span class="cx">                         }
</span><span class="cx">                         incr numfailed
</span><span class="cx">                         continue
</span><span class="cx">                     }
</span><span class="cx">                 }
</span><del>-                set needs_portindex 1
</del><ins>+                set needs_portindex true
</ins><span class="cx">             }
</span><span class="cx">             {^rsync$} {
</span><span class="cx">                 # Where to, boss?
</span><span class="lines">@@ -2470,7 +2497,7 @@
</span><span class="cx">                     file delete -force ${destdir}/tmp
</span><span class="cx">                 }
</span><span class="cx"> 
</span><del>-                set needs_portindex 1
</del><ins>+                set needs_portindex true
</ins><span class="cx">                 # now sync the index if the local file is missing or older than a day
</span><span class="cx">                 if {![file isfile $indexfile] || [clock seconds] - [file mtime $indexfile] &gt; 86400
</span><span class="cx">                       || [info exists options(no_reindex)]} {
</span><span class="lines">@@ -2487,10 +2514,10 @@
</span><span class="cx">                         ui_debug &quot;Synchronization of the PortIndex failed doing rsync&quot;
</span><span class="cx">                     } else {
</span><span class="cx">                         set ok 1
</span><del>-                        set needs_portindex 0
</del><ins>+                        set needs_portindex false
</ins><span class="cx">                         if {$is_tarball} {
</span><span class="cx">                             set ok 0
</span><del>-                            set needs_portindex 1
</del><ins>+                            set needs_portindex true
</ins><span class="cx">                             # verify signature for PortIndex
</span><span class="cx">                             set rsync_commandline &quot;$macports::autoconf::rsync_path $rsync_options ${remote_indexfile}.rmd160 $destdir&quot;
</span><span class="cx">                             ui_debug $rsync_commandline
</span><span class="lines">@@ -2498,7 +2525,7 @@
</span><span class="cx">                                 foreach pubkey $macports::archivefetch_pubkeys {
</span><span class="cx">                                     if {![catch {exec $openssl dgst -ripemd160 -verify $pubkey -signature ${destdir}/PortIndex.rmd160 ${destdir}/PortIndex} result]} {
</span><span class="cx">                                         set ok 1
</span><del>-                                        set needs_portindex 0
</del><ins>+                                        set needs_portindex false
</ins><span class="cx">                                         ui_debug &quot;successful verification with key $pubkey&quot;
</span><span class="cx">                                         break
</span><span class="cx">                                     } else {
</span><span class="lines">@@ -2612,7 +2639,7 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if {$needs_portindex} {
</span><del>-            set any_needed_portindex 1
</del><ins>+            set any_needed_portindex true
</ins><span class="cx">             if {![info exists options(no_reindex)]} {
</span><span class="cx">                 global macports::prefix
</span><span class="cx">                 set indexdir [file dirname [macports::getindex $source]]
</span><span class="lines">@@ -2628,9 +2655,12 @@
</span><span class="cx">         _mports_load_quickindex
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if {$numfailed &gt; 0} {
-        return -code error &quot;Synchronization of $numfailed source(s) failed&quot;
</del><ins>+    if {$numfailed == 1} {
+        return -code error &quot;Synchronization of 1 source failed&quot;
</ins><span class="cx">     }
</span><ins>+    if {$numfailed &gt;= 2} {
+        return -code error &quot;Synchronization of $numfailed sources failed&quot;
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ##
</span><span class="lines">@@ -3323,11 +3353,15 @@
</span><span class="cx">     if {![macports::ui_isset ports_debug]} {
</span><span class="cx">         ui_msg {}
</span><span class="cx">     }
</span><del>-    ui_error &quot;Cannot install $port for the arch(s) '$required_archs' because&quot;
</del><ins>+
+    set s [expr {[llength $required_archs] == 1 ? &quot;&quot; : &quot;s&quot;}]
+
+    ui_error &quot;Cannot install $port for the arch${s} '$required_archs' because&quot;
</ins><span class="cx">     if {$supported_archs ne {}} {
</span><ins>+        set ss [expr {[llength $supported_archs] == 1 ? &quot;&quot; : &quot;s&quot;}]
</ins><span class="cx">         foreach arch $required_archs {
</span><span class="cx">             if {[lsearch -exact $supported_archs $arch] == -1} {
</span><del>-                ui_error &quot;its dependency $dep only supports the arch(s) '$supported_archs'.&quot;
</del><ins>+                ui_error &quot;its dependency $dep only supports the arch${ss} '$supported_archs'.&quot;
</ins><span class="cx">                 return
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -3335,15 +3369,15 @@
</span><span class="cx">     if {$has_universal} {
</span><span class="cx">         foreach arch $required_archs {
</span><span class="cx">             if {[lsearch -exact $universal_archs $arch] == -1} {
</span><del>-                ui_error &quot;its dependency $dep does not build for the required arch(s) by default&quot;
</del><ins>+                ui_error &quot;its dependency $dep does not build for the required arch${s} by default&quot;
</ins><span class="cx">                 ui_error &quot;and the configured universal_archs '$universal_archs' are not sufficient.&quot;
</span><span class="cx">                 return
</span><span class="cx">             }
</span><span class="cx">         }
</span><del>-        ui_error &quot;its dependency $dep cannot build for the required arch(s).&quot;
</del><ins>+        ui_error &quot;its dependency $dep cannot build for the required arch${s}.&quot;
</ins><span class="cx">         return
</span><span class="cx">     }
</span><del>-    ui_error &quot;its dependency $dep does not build for the required arch(s) by default&quot;
</del><ins>+    ui_error &quot;its dependency $dep does not build for the required arch${s} by default&quot;
</ins><span class="cx">     ui_error &quot;and does not have a universal variant.&quot;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4373,6 +4407,45 @@
</span><span class="cx">     return yes
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+proc macports::doctor_main {opts} {
+    
+    # Calls the main function for the 'port doctor' command.
+    #
+    # Args: 
+    #           None
+    # Returns:
+    #           0 on successful execution.
+
+    doctor::main $opts
+    return 0
+}
+
+proc macports::check_last_reclaim {} {
+
+    # An abstraction layer for the reclaim function, 'check_last_run'.
+    #
+    # Args:
+    #           None
+    # Returns:
+    #           None
+
+    reclaim::check_last_run
+    return 0
+}
+
+proc macports::reclaim_main {} {
+
+    # Calls the main function for the 'port reclaim' command.
+    #
+    # Args:
+    #           None
+    # Returns:
+    #           None
+
+    reclaim::main
+    return 0
+}
+
</ins><span class="cx"> ##
</span><span class="cx"> # Execute the rev-upgrade scan and attempt to rebuild all ports found to be
</span><span class="cx"> # broken. Depends on the revupgrade_mode setting from macports.conf.
</span><span class="lines">@@ -4660,11 +4733,14 @@
</span><span class="cx"> 
</span><span class="cx">         machista::destroy_handle $handle
</span><span class="cx"> 
</span><del>-        if {[llength $broken_files] == 0} {
</del><ins>+        set num_broken_files [llength $broken_files]
+        set s [expr {$num_broken_files == 1 ? &quot;&quot; : &quot;s&quot;}]
+
+        if {$num_broken_files == 0} {
</ins><span class="cx">             ui_msg &quot;$macports::ui_prefix No broken files found.&quot;
</span><span class="cx">             return 0
</span><span class="cx">         }
</span><del>-        ui_msg &quot;$macports::ui_prefix Found [llength $broken_files] broken file(s), matching files to ports&quot;
</del><ins>+        ui_msg &quot;$macports::ui_prefix Found $num_broken_files broken file${s}, matching files to ports&quot;
</ins><span class="cx">         set broken_ports {}
</span><span class="cx">         set broken_files [lsort -unique $broken_files]
</span><span class="cx">         foreach file $broken_files {
</span><span class="lines">@@ -4716,7 +4792,9 @@
</span><span class="cx">                 if {$fancy_output} {
</span><span class="cx">                     ui_error &quot;Please run port -d -y rev-upgrade and use the output to report a bug.&quot;
</span><span class="cx">                 }
</span><del>-                error &quot;Port $portname still broken after rebuilding [expr {$broken_port_counts($portname) - 1}] time(s)&quot;
</del><ins>+                set rebuild_tries [expr {$broken_port_counts($portname) - 1}]
+                set s [expr {$rebuild_tries == 1 ? &quot;&quot; : &quot;s&quot;}]
+                error &quot;Port $portname still broken after rebuilding $rebuild_tries time${s}&quot;
</ins><span class="cx">             } elseif {$broken_port_counts($portname) &gt; 1 &amp;&amp; [global_option_isset ports_binary_only]} {
</span><span class="cx">                 error &quot;Port $portname still broken after reinstalling -- can't rebuild due to binary-only mode&quot;
</span><span class="cx">             }
</span><span class="lines">@@ -4724,8 +4802,11 @@
</span><span class="cx">         }
</span><span class="cx">         unset temp_broken_ports
</span><span class="cx"> 
</span><ins>+        set num_broken_ports [llength $broken_ports]
+        set s [expr {$num_broken_ports == 1 ? &quot;&quot; : &quot;s&quot;}]
+
</ins><span class="cx">         if {$macports::revupgrade_mode ne {rebuild}} {
</span><del>-            ui_msg &quot;$macports::ui_prefix Found [llength $broken_ports] broken port(s):&quot;
</del><ins>+            ui_msg &quot;$macports::ui_prefix Found $num_broken_ports broken port${s}:&quot;
</ins><span class="cx">             foreach port $broken_ports {
</span><span class="cx">                 ui_msg &quot;     [$port name] @[$port version] [$port variants][$port negated_variants]&quot;
</span><span class="cx">                 foreach f $broken_files_by_port($port) {
</span><span class="lines">@@ -4735,7 +4816,7 @@
</span><span class="cx">             return 0
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        ui_msg &quot;$macports::ui_prefix Found [llength $broken_ports] broken port(s), determining rebuild order&quot;
</del><ins>+        ui_msg &quot;$macports::ui_prefix Found $num_broken_ports broken port${s}, determining rebuild order&quot;
</ins><span class="cx">         # broken_ports are the nodes in our graph
</span><span class="cx">         # now we need adjacents
</span><span class="cx">         foreach port $broken_ports {
</span></span></pre></div>
<a id="branchesgsoc14interactivebasesrcmacports10reclaimtclfromrev124235trunkbasesrcmacports10reclaimtcl"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/src/macports1.0/reclaim.tcl (from rev 124235, trunk/base/src/macports1.0/reclaim.tcl) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/macports1.0/reclaim.tcl                                (rev 0)
+++ branches/gsoc14-interactive/base/src/macports1.0/reclaim.tcl        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,387 @@
</span><ins>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
+# reclaim.tcl
+# $Id: macports.tcl 119177 2014-04-18 22:35:29Z cal@macports.org $
+#
+# Copyright (c) 2002 - 2003 Apple Inc.
+# Copyright (c) 2004 - 2005 Paul Guyot, &lt;pguyot@kallisys.net&gt;.
+# Copyright (c) 2004 - 2006 Ole Guldberg Jensen &lt;olegb@opendarwin.org&gt;.
+# Copyright (c) 2004 - 2005 Robert Shaw &lt;rshaw@opendarwin.org&gt;
+# Copyright (c) 2004 - 2014 The MacPorts Project
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. Neither the name of Apple Inc. nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# TODO:
+
+# Finished:
+# Add ui_debug statments
+# Catch some error-prone areas.
+# Remove the useless/structure comments and add actual docstrings.
+# Add copyright notice
+# Check if inactive files are dependents for other files. 
+# Add test cases
+# Add distfile version checking.
+# Pretty sure we should be using ui_msg, instead of puts and what not. Should probably add that.
+# Register the &quot;port cleanup&quot; command with port.tcl and all that involves.
+# Implement a hash-map, or multidimensional array for ease of app info keeping. Write it yourself if you have to.
+# Figure out what the hell is going on with &quot;port clean all&quot; vs &quot;port clean installed&quot; the 'clean' target is provided by this package
+
+package provide reclaim 1.0
+
+package require registry_uninstall 2.0
+package require macports
+
+namespace eval reclaim {
+
+    proc main {args} {
+
+        # The main function. Calls each individual function that needs to be run.
+        # Args: 
+        #           None
+        # Returns:
+        #           None
+
+        uninstall_inactive
+        remove_distfiles
+        update_last_run
+    }
+
+    proc is_empty_dir {dir} {
+        
+        # Test if the given directory is empty.
+        # Args:
+        #           dir         - A string path of the given directory to test
+        # Returns:
+        #           0 if the directory is not empty, 1 if it is.
+
+        # Get _all_ files
+        set filenames [glob -nocomplain -tails -directory $dir * .*]
+
+        # Yay complex statements! Use RE, lsearch, and llength to determine if the directory is empty.  
+        expr {![llength [lsearch -all -not -regexp $filenames {^\.\.?$}]]}
+    }
+
+    proc walk_files {dir delete dist_paths} {
+
+        # Recursively walk through each directory that isn't an installed port and if delete each file that isn't a directory if requested.
+        # Args:
+        #           dir             - A string path of the given directory to walk through
+        #           delete          - Whether to delete each file found that isn't a directory or not. Set to 'yes' or 'no'. 
+        #           dist_paths      - A list of the full paths for all distfiles from installed ports  
+        # Returns: 
+        #           'no' if no distfiles were found, and 'yes' if distfiles were found. 
+
+        set found_distfile  no 
+        set root_dist       [file join ${macports::portdbpath} distfiles]
+        set home_dist       ${macports::user_home}/.macports/$root_dist
+
+
+        # If the directory is empty, and this isn't the root folder, delete it and recursively go up directories until a non-empty one is found.
+        if { $dir ne $root_dist &amp;&amp; $dir ne $home_dist &amp;&amp; [readdir $dir] eq &quot;&quot;} {
+
+            set up_dir [file dirname $dir]
+
+            ui_msg &quot;Found empty directory: $dir. Attempting to delete.&quot;
+
+            if {[catch {file delete -force $dir} error] } {
+                ui_error &quot;something went wrong when trying to delete $dir&quot;
+            }
+
+            walk_files $up_dir $delete $dist_paths
+            return
+        }
+
+        foreach item [readdir $dir] {
+
+            set currentPath [file join $dir $item]
+
+            if {[file isdirectory $currentPath]} {
+
+                walk_files $currentPath $delete $dist_paths
+
+            } else {
+                
+                # If the current file isn't in the known-installed-distfiles
+                if {[lsearch $dist_paths $currentPath] == -1} {
+                    set found_distfile yes
+
+                    ui_msg &quot;Found distfile: $item&quot;
+
+                    if {$delete eq &quot;yes&quot;} {
+
+                        ui_debug &quot;Deleting file: $item&quot;
+                        ui_msg &quot;Removing distfile: $item&quot;
+
+                        if {[catch {file delete $currentPath} error]} {
+                            ui_error &quot;something went wrong when trying to delete $currentPath&quot;
+                        }
+
+                        # If the directory is now empty, recursively call on this directory, to delete it.
+                        if {[is_empty_dir $dir]} {
+
+                            ui_debug &quot;Current directory is empty. Walking to $dir&quot;
+                            walk_files $dir $delete $dist_paths
+                        }
+                    }
+                }
+            }
+        }
+
+        return $found_distfile
+    }
+
+    proc remove_distfiles {} {
+
+        # Check for distfiles in both the root, and home directories. If found, delete them.
+        # Args:
+        #               None
+        # Returns:
+        #               0 on successful execution
+
+        global macports::portdbpath
+        global macports::user_home
+
+        # The root and home distfile folder locations, respectively. 
+        set root_dist       [file join ${macports::portdbpath} distfiles]
+        set home_dist       ${macports::user_home}/.macports$root_dist
+
+        set port_info    [get_info]
+        set dist_path    [list]
+
+        foreach port $port_info {
+
+            set name        [lindex $port 0]
+            set version     [lindex $port 1]
+            set revision    [lindex $port 2]
+            set variants    [lindex $port 3]
+
+            # Get mport reference
+            if {[catch {set mport [mportopen_installed $name $version $revision $variants {}]} error]} {
+                ui_error &quot;something went wrong when trying to get an mport reference.&quot;
+            }
+
+            # Setup sub-Tcl-interpreter that executed the installed port
+            set workername [ditem_key $mport workername]
+
+            # Append that port's distfiles to the list
+            set subdir [$workername eval return \$dist_subdir]
+            set name   [$workername eval return \$distfiles]
+
+            set root_path [file join $root_dist $subdir $name]
+            set home_path [file join $home_dist $subdir $name]
+
+            # Add the full file path to the list, depending where it's located.
+            if {[file isfile $root_path]} {
+                ui_debug &quot;Appending $root_path.&quot;
+                lappend dist_path $root_path
+
+            } else {
+                if {[file isfile $home_path]} {
+                    ui_debug &quot;Appending $home_path&quot;
+                    lappend dist_path $home_path
+                }
+            }
+        }
+
+        ui_debug &quot;Calling walk_files on root directory.&quot;
+
+        # Walk through each directory, and delete any files found. Alert the user if no files were found.
+        if {[walk_files $root_dist yes $dist_path] eq &quot;no&quot;} {
+            ui_msg &quot;No distfiles found in root directory.&quot;
+        }
+
+        if {[file exists $home_dist]} {
+
+            ui_debug &quot;Calling walk_files on home directory.&quot;
+
+            if {[walk_files $home_dist yes $dist_path] eq &quot;no&quot;} {
+                ui_msg &quot;No distfiles found in home directory.&quot;
+            }
+        }
+
+        return 0
+    } 
+
+    proc close_file {file} {
+
+        # Closes the file, handling error catching if needed.
+        #
+        # Args: 
+        #           file - The file handler
+        # Returns:
+        #           None
+        if {[catch {close $file} error]} {
+            ui_error &quot;something went wrong when closing file, $file.&quot;
+        }
+    }
+
+    proc is_inactive {app} {
+
+        # Determine's whether an application is inactive or not.
+        # Args: 
+        #           app - An array where the fourth item in it is the activity of the application.
+        # Returns:
+        #           1 if inactive, 0 if active.
+
+        if {[lindex $app 4] == 0} {
+            ui_debug &quot;App, [lindex $app 0], is inactive.&quot;
+            return 1
+        }
+        ui_debug &quot;App, [lindex $app 0], is not inactive.&quot;
+        return 0
+    }
+
+    proc get_info {} {
+
+        # Get's the information of all installed appliations (those returned by registry::installed), and returns it in a
+        # multidimensional list.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           A multidimensional list where each app is a sublist, i.e., [{First Application Info} {Second Application Info} {...}]
+        #           Indexes of each sublist are: 0 = name, 1 = version, 2 = revision, 3 = variants, 4 = activity, and 5 = epoch.
+        
+        if {[catch {set installed [registry::installed]} result]} {
+            ui_error &quot;no installed applications found.&quot;
+            return {}
+        }
+
+        return $installed
+    }
+
+    proc update_last_run {} {
+        
+        # Updates the last_reclaim textfile with the newest time the code has been ran. 
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        ui_debug &quot;Updating last run information.&quot;
+
+        set path    [file join ${macports::portdbpath} last_reclaim.txt]
+        set fd      [open $path w]
+        puts $fd    [clock seconds]
+        close_file $fd
+    }
+
+    proc check_last_run {} {
+
+        # Periodically warn's the user that they haven't run 'port reclaim' in two weeks, and that they should consider doing so.
+        # 
+        # Args:
+        #           None
+        # Returns: 
+        #           None
+
+        ui_debug &quot;Checking last run information.&quot;
+
+        set path [file join ${macports::portdbpath} last_reclaim.txt]
+
+        if {[file exists $path]} {
+
+            set fd      [open $path r]
+            set time    [gets $fd]
+            close_file $fd
+
+            if {$time ne &quot;&quot;} {
+                if {[clock seconds] - $time &gt; 1209600} {
+                    ui_warn &quot;you haven't run 'port reclaim' in two weeks. It's recommended you run this once every two weeks to help save space on your computer.&quot;
+                }
+            }
+        }
+    }
+
+    proc uninstall_inactive {} {
+
+        # Attempts to uninstall all inactive applications. (Performance is now O(N)!)
+        #
+        # Args: 
+        #           None
+        # Returns: 
+        #           0 if execution was successful. Errors (for now) if execution wasn't. 
+
+        set apps            [get_info]
+        set inactive_apps   [list]
+        set inactive_names  [list]
+        set inactive_count  0
+
+        ui_debug &quot;Iterating through all inactive apps.&quot;
+
+        foreach app $apps {
+
+            if { [is_inactive $app] } {
+                lappend inactive_apps $app
+                lappend inactive_names [lindex $app 0]
+                incr inactive_count
+            }
+        }
+
+        if { $inactive_count == 0 } {
+            ui_msg &quot;Found no inactive ports.&quot;
+
+        } else {
+
+            ui_msg &quot;Found inactive ports: $inactive_names.&quot;
+            ui_msg &quot;Would you like to uninstall these apps? \[Y/N\]: &quot;
+
+            set input [gets stdin]
+            if {$input eq &quot;Y&quot; || $input eq &quot;y&quot; } {
+
+                ui_debug &quot;Iterating through all inactive apps... again.&quot;
+
+                foreach app $inactive_apps {
+                    set name [lindex $app 0]
+
+                    # Get all dependents for the current application
+                    if {[catch {set dependents [registry::list_dependents $name [lindex 1] [lindex 2] [lindex 3]]} error]} {
+                        ui_error &quot;something went wrong when trying to enumerate all dependents for $name&quot;
+                    }
+                    if {dependents ne &quot;&quot;} {
+                        ui_warn &quot;the following application ($name) is a dependent for $dependents. Are you positive you'd like to uninstall this 
+                                 (this could break other applications)? \[Y/N\]&quot;
+
+                        set input [gets stdin]
+                        if { $input eq &quot;N&quot; || &quot;n&quot; } {
+                            ui_msg &quot;Skipping application.&quot;
+                            continue
+                        }
+                    }
+                    ui_msg &quot;Uninstalling: $name&quot;
+
+                    # Note: 'uninstall' takes a name, version, revision, variants and an options list. 
+                    if {[catch {registry_uninstall::uninstall $name [lindex $app 1] [lindex $app 2] [lindex $app 3] {}} error]} {
+                        ui_error &quot;something went wrong when uninstalling $name&quot;
+                    }
+                }
+            } else {
+                ui_msg &quot;Not uninstalling applications.&quot;
+            }
+        }
+        return 0
+    }
+}
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasesrcmacports10testsreclaimtestfromrev124235trunkbasesrcmacports10testsreclaimtest"></a>
<div class="copfile"><h4>Copied: branches/gsoc14-interactive/base/src/macports1.0/tests/reclaim.test (from rev 124235, trunk/base/src/macports1.0/tests/reclaim.test) (0 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/macports1.0/tests/reclaim.test                                (rev 0)
+++ branches/gsoc14-interactive/base/src/macports1.0/tests/reclaim.test        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -0,0 +1,163 @@
</span><ins>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
+
+package require tcltest 2
+package require reclaim 1.0
+namespace import tcltest::*
+
+set pwd [file dirname [file normalize $argv0]]
+
+source ../macports_test_autoconf.tcl
+package require macports 1.0
+
+array set ui_options {}
+mportinit ui_options
+
+test is_empty_dir {
+
+    # Regression test for is_empty_dir.
+    # 
+    # Constraints:
+    #               None.
+
+    walk_files
+    Test for correctly identifying an empty directory.
+
+} -body {
+
+    set empty &quot;emptyDir&quot; 
+    file mkdir $empty 
+
+    if {[reclaim::is_empty_dir $empty] == 0} {
+        return &quot;FAIL: Did not detect empty directory.&quot;
+    } 
+
+    return &quot;Successfully detected empty directory.&quot;
+
+} -cleanup {
+    file delete -force $empty
+
+} -result &quot;Successfully detected empty directory.&quot;
+
+test remove_distfiles {
+
+    # Regression test for remove_distfiles.
+    # 
+    # Constraints:
+    #               None.
+
+    Test for distfiles being successfully removed.
+
+} -body {
+    
+    set path [file join ${macports::portdbpath} distfiles]
+    set file [file join $path &quot;test.txt&quot;]
+
+    set fd   [open $file w]
+    close $fd
+    
+    reclaim::remove_distfiles
+
+    if {[file exists $file]} {
+        return &quot;FAIL: Did not remove distfile.&quot;
+    }
+
+    return &quot;Successfully removed distfile.&quot;
+
+} -cleanup {
+    file delete -force $file
+
+} -result &quot;Successfully removed distfile.&quot;
+
+test update_last_run {
+
+    # Regression test for update_last_run.
+    # 
+    # Constraints:
+    #               Require's root to run. 
+
+    Tests for last_reclaim.txt being updated.
+
+} -constraints {
+    root
+
+} -body {
+
+    set path     [file join ${macports::portdbpath} last_reclaim.txt]
+
+    set fd          [open $path w]
+    close $fd
+
+    set fd          [open $path r]
+    set old_time    [gets $fd]
+    close $fd
+
+    reclaim::update_last_run
+
+    set fd          [open $path r]
+    set new_time    [gets $fd]
+    close $fd
+
+    if {$new_time == $old_time} {
+        return &quot;FAIL: Did not update to the current time.&quot;
+    }
+
+    return &quot;Successfully updated to the correct time.&quot;
+
+} -cleanup {
+    set fd  [open $path w]
+    puts $fd $old_time
+    close $fd
+
+} -result &quot;Successfully updated to the correct time.&quot;
+
+
+test walk_files {
+
+    # Regression test for walk_files.
+    # 
+    # Constraints:
+    #               Require's root to run. 
+
+    Tests if walking through the files, and deleting distfiles, ignoring normal files, and removing directory trees works.
+
+} -constraints {
+    root
+
+} -body {
+    
+    set path        [file join ${macports::portdbpath} distfiles]
+    set dir         [file join $path tmp_dir]
+    set subdir      [file join $dir other_tmp_dir]
+    set bad_dist    [file join $subdir bad_distfile.txt]
+    set bad_dist2   [file join $dir bad_distfile2.txt]
+    set good_dist   [file join $dir good_distfile.txt]
+    set dist_list   [list]
+
+    lappend dist_list $good_dist
+
+    file mkdir $subdir
+
+    set $fd         [open $bad_dist w] 
+    close $fd
+
+    set $fd         [open $bad_dist2 w] 
+    close $fd
+
+    set $fd         [open $good_dist w] 
+    close $fd
+
+    reclaim::walk_files $dir yes $dist_list 
+
+    if {[file exists $bad_dist] || [file exists $bad_dist2] || [file exists $subdir] || ![file exists $good_dist] || ![file exists $dir]} {
+        return &quot;FAIL: Did not delete the correct files, or deleted files that should not have been deleted.&quot;
+    }
+
+    return &quot;Successfully deleted all files that needed to be deleted.&quot;
+    
+} -cleanup {
+    file delete -force $dir  
+
+} -result &quot;Successfully deleted all files that needed to be deleted.&quot;
+
+cleanupTests
+
</ins></span></pre></div>
<a id="branchesgsoc14interactivebasesrcpextlib10Makefilein"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/src/pextlib1.0/Makefile.in (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/pextlib1.0/Makefile.in        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/src/pextlib1.0/Makefile.in        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -13,6 +13,9 @@
</span><span class="cx"> OBJS+=strlcat.o
</span><span class="cx"> endif
</span><span class="cx"> 
</span><ins>+# tracelib.o has an additional dependency
+tracelib.o: ../darwintracelib1.0/sandbox_actions.h
+
</ins><span class="cx"> SHLIB_NAME= Pextlib${SHLIB_SUFFIX}
</span><span class="cx"> INSTALLDIR= ${DESTDIR}${TCL_PACKAGE_PATH}/pextlib1.0
</span><span class="cx"> 
</span><span class="cx">Property changes on: branches/gsoc14-interactive/base/src/pextlib1.0/Makefile.in
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svnmergeinfo"></a>
<div class="modfile"><h4>Modified: svn:mergeinfo</h4></div>
<span class="cx">/branches/gsoc08-privileges/base/src/pextlib1.0/Makefile.in:37343-46937
</span><span class="cx">/branches/gsoc09-logging/base/src/pextlib1.0/Makefile:51231-60371
</span><span class="cx">/branches/gsoc09-logging/base/src/pextlib1.0/Makefile.in:51231-60371
</span><span class="cx">/branches/gsoc11-rev-upgrade/base/src/pextlib1.0/Makefile:78828-88375
</span><span class="cx">/branches/gsoc11-rev-upgrade/base/src/pextlib1.0/Makefile.in:78828-88375
</span><span class="cx">/branches/gsoc13-tests/src/pextlib1.0/Makefile.in:106692-111324
</span><span class="cx">/branches/universal-sanity/base/src/pextlib1.0/Makefile:51872-52323
</span><span class="cx">/branches/universal-sanity/base/src/pextlib1.0/Makefile.in:51872-52323
</span><span class="cx">/branches/variant-descs-14482/base/src/pextlib1.0/Makefile:34469-34855,34900-37508,37511-37512,41040-41463,42575-42626,42640-42659
</span><span class="cx">/branches/variant-descs-14482/base/src/pextlib1.0/Makefile.in:34469-34855,34900-37508,37511-37512,41040-41463,42575-42626,42640-42659
</span><span class="cx">/trunk/base/src/pextlib1.0/Makefile.in:49341-104698,119514-123795
</span><span class="cx">/users/perry/base-bugs_and_notes/src/pextlib1.0/Makefile:45682-46060
</span><span class="cx">/users/perry/base-bugs_and_notes/src/pextlib1.0/Makefile.in:45682-46060
</span><span class="cx">/users/perry/base-select/src/pextlib1.0/Makefile:44044-44692
</span><span class="cx">/users/perry/base-select/src/pextlib1.0/Makefile.in:44044-44692
</span><span class="cx">   + /branches/gsoc08-privileges/base/src/pextlib1.0/Makefile:37343-46937
</span><span class="cx">/branches/gsoc08-privileges/base/src/pextlib1.0/Makefile.in:37343-46937
</span><span class="cx">/branches/gsoc09-logging/base/src/pextlib1.0/Makefile:51231-60371
</span><span class="cx">/branches/gsoc09-logging/base/src/pextlib1.0/Makefile.in:51231-60371
</span><span class="cx">/branches/gsoc11-rev-upgrade/base/src/pextlib1.0/Makefile:78828-88375
</span><span class="cx">/branches/gsoc11-rev-upgrade/base/src/pextlib1.0/Makefile.in:78828-88375
</span><span class="cx">/branches/gsoc13-tests/src/pextlib1.0/Makefile.in:106692-111324
</span><span class="cx">/branches/universal-sanity/base/src/pextlib1.0/Makefile:51872-52323
</span><span class="cx">/branches/universal-sanity/base/src/pextlib1.0/Makefile.in:51872-52323
</span><span class="cx">/branches/variant-descs-14482/base/src/pextlib1.0/Makefile:34469-34855,34900-37508,37511-37512,41040-41463,42575-42626,42640-42659
</span><span class="cx">/branches/variant-descs-14482/base/src/pextlib1.0/Makefile.in:34469-34855,34900-37508,37511-37512,41040-41463,42575-42626,42640-42659
</span><span class="cx">/trunk/base/src/pextlib1.0/Makefile.in:49341-104698,119514-124235
</span><span class="cx">/users/perry/base-bugs_and_notes/src/pextlib1.0/Makefile:45682-46060
</span><span class="cx">/users/perry/base-bugs_and_notes/src/pextlib1.0/Makefile.in:45682-46060
</span><span class="cx">/users/perry/base-select/src/pextlib1.0/Makefile:44044-44692
</span><span class="cx">/users/perry/base-select/src/pextlib1.0/Makefile.in:44044-44692
</span><a id="branchesgsoc14interactivebasesrcpextlib10tracelibc"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/src/pextlib1.0/tracelib.c (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/pextlib1.0/tracelib.c        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/src/pextlib1.0/tracelib.c        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -59,6 +59,7 @@
</span><span class="cx"> #include &lt;cregistry/portgroup.h&gt;
</span><span class="cx"> #include &lt;cregistry/entry.h&gt;
</span><span class="cx"> #include &lt;registry2.0/registry.h&gt;
</span><ins>+#include &lt;darwintracelib1.0/sandbox_actions.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;tracelib.h&quot;
</span><span class="cx"> 
</span><span class="lines">@@ -84,7 +85,7 @@
</span><span class="cx"> 
</span><span class="cx"> static char *name;
</span><span class="cx"> static char *sandbox;
</span><del>-static char *filemap, *filemap_end;
</del><ins>+static size_t sandboxLength;
</ins><span class="cx"> static char *depends;
</span><span class="cx"> static int sock = -1;
</span><span class="cx"> static int kq = -1;
</span><span class="lines">@@ -95,11 +96,16 @@
</span><span class="cx"> static Tcl_Interp *interp;
</span><span class="cx"> static pthread_mutex_t sock_mutex = PTHREAD_MUTEX_INITIALIZER;
</span><span class="cx"> static int cleanuping = 0;
</span><del>-static char *sdk = NULL;
</del><span class="cx"> 
</span><span class="cx"> static void send_file_map(int sock);
</span><span class="cx"> static void dep_check(int sock, char *path);
</span><del>-static void sandbox_violation(int sock, const char *path);
</del><ins>+
+typedef enum {
+    SANDBOX_UNKNOWN,
+    SANDBOX_VIOLATION
+} sandbox_violation_t;
+static void sandbox_violation(int sock, const char *path, sandbox_violation_t type);
+
</ins><span class="cx"> static void ui_warn(const char *format, ...) __printflike(1, 2);
</span><span class="cx"> #if 0
</span><span class="cx"> static void ui_info(const char *format, ...) __printflike(1, 2);
</span><span class="lines">@@ -179,9 +185,8 @@
</span><span class="cx">  * \return a Tcl return code
</span><span class="cx">  */
</span><span class="cx"> static int TracelibSetSandboxCmd(Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) {
</span><del>-    int len;
</del><span class="cx">     char *src, *dst;
</span><del>-    enum { NORMAL, ESCAPE } state = NORMAL;
</del><ins>+    enum { NORMAL, ACTION, ESCAPE } state = NORMAL;
</ins><span class="cx"> 
</span><span class="cx">     if (objc != 3) {
</span><span class="cx">         Tcl_WrongNumArgs(interp, 2, objv, &quot;number of arguments should be exactly 3&quot;);
</span><span class="lines">@@ -189,8 +194,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     src = Tcl_GetString(objv[2]);
</span><del>-    len = strlen(src) + 2;
-    sandbox = malloc(len);
</del><ins>+    sandboxLength = strlen(src) + 2;
+    sandbox = malloc(sandboxLength);
</ins><span class="cx">     if (!sandbox) {
</span><span class="cx">         Tcl_SetResult(interp, &quot;memory allocation failed&quot;, TCL_STATIC);
</span><span class="cx">         return TCL_ERROR;
</span><span class="lines">@@ -213,18 +218,62 @@
</span><span class="cx">                     /* : was escaped, keep literally */
</span><span class="cx">                     *dst++ = ':';
</span><span class="cx">                     state = NORMAL;
</span><ins>+                } else if (state == ACTION) {
+                    /* : -&gt; \0, we're done with this entry */
+                    *dst++ = '\0';
+                    state = NORMAL;
</ins><span class="cx">                 } else {
</span><del>-                    /* : -&gt; \0, unless it has been escaped */
</del><ins>+                    /* unescaped : should never occur in normal state */
+                    free(sandbox);
+                    Tcl_SetResult(interp, &quot;Unexpected colon before action specification.&quot;, TCL_STATIC);
+                    return TCL_ERROR;
+                }
+                break;
+            case '=':
+                if (state == ESCAPE) {
+                    /* = was escaped, keep literally */
+                    *dst++ = '=';
+                    state = NORMAL;
+                } else {
+                    /* hit =, this is the end of the path, the action follows */
</ins><span class="cx">                     *dst++ = '\0';
</span><ins>+                    state = ACTION;
</ins><span class="cx">                 }
</span><span class="cx">                 break;
</span><ins>+            case '+':
+            case '-':
+            case '?':
+                if (state == ACTION) {
+                    /* control character after equals, convert to binary */
+                    switch (*src) {
+                        case '+':
+                            *dst++ = FILEMAP_ALLOW;
+                            break;
+                        case '-':
+                            *dst++ = FILEMAP_DENY;
+                            break;
+                        case '?':
+                            *dst++ = FILEMAP_ASK;
+                            break;
+                    }
+                } else {
+                    /* before equals sign, copy literally */
+                    *dst++ = *src;
+                }
+                break;
</ins><span class="cx">             default:
</span><span class="cx">                 if (state == ESCAPE) {
</span><span class="cx">                     /* unknown escape sequence, free buffer and raise an error */
</span><span class="cx">                     free(sandbox);
</span><del>-                    Tcl_SetResult(interp, &quot;unknown escape sequence&quot;, TCL_STATIC);
</del><ins>+                    Tcl_SetResult(interp, &quot;Unknown escape sequence.&quot;, TCL_STATIC);
</ins><span class="cx">                     return TCL_ERROR;
</span><span class="cx">                 }
</span><ins>+                if (state == ACTION) {
+                    /* unknown control character, free buffer and raise an error */
+                    free(sandbox);
+                    Tcl_SetResult(interp, &quot;Unknown control character. Possible values are +, -, and ?.&quot;, TCL_STATIC);
+                    return TCL_ERROR;
+                }
</ins><span class="cx">                 /* otherwise: copy the char */
</span><span class="cx">                 *dst++ = *src;
</span><span class="cx">                 break;
</span><span class="lines">@@ -291,8 +340,10 @@
</span><span class="cx"> 
</span><span class="cx">     if (strcmp(buf, &quot;filemap&quot;) == 0) {
</span><span class="cx">         send_file_map(sock);
</span><ins>+    } else if (strcmp(buf, &quot;sandbox_unknown&quot;) == 0) {
+        sandbox_violation(sock, f, SANDBOX_UNKNOWN);
</ins><span class="cx">     } else if (strcmp(buf, &quot;sandbox_violation&quot;) == 0) {
</span><del>-        sandbox_violation(sock, f);
</del><ins>+        sandbox_violation(sock, f, SANDBOX_VIOLATION);
</ins><span class="cx">     } else if (strcmp(buf, &quot;dep_check&quot;) == 0) {
</span><span class="cx">         dep_check(sock, f);
</span><span class="cx">     } else {
</span><span class="lines">@@ -310,68 +361,12 @@
</span><span class="cx">  * \param[in] sock the socket to send the sandbox bounds to
</span><span class="cx">  */
</span><span class="cx"> static void send_file_map(int sock) {
</span><del>-    if (!filemap) {
-        char *t, * _;
-
-        size_t remaining = BUFSIZE;
-        filemap = (char *)malloc(remaining);
-        if (!filemap) {
-            ui_warn(&quot;send_file_map: memory allocation failed&quot;);
-            return;
-        }
-        t = filemap;
-
-#       define append_allow(path, resolution) do { strlcpy(t, path, remaining); \
-            if (remaining &lt; (strlen(t)+3)) { \
-                remaining=0; \
-                fprintf(stderr, &quot;tracelib: insufficient filemap memory\n&quot;); \
-            } else { \
-                remaining-=strlen(t)+3; \
-            } \
-            t+=strlen(t)+1; \
-            *t++=resolution; \
-            *t++=0; \
-        } while(0);
-
-        if (enable_fence) {
-            for (_ = sandbox; *_; _ += strlen(_) + 1) {
-                append_allow(_, 0);
-            }
-
-            append_allow(&quot;/bin&quot;, 0);
-            append_allow(&quot;/sbin&quot;, 0);
-            append_allow(&quot;/dev&quot;, 0);
-            append_allow(Tcl_GetVar(interp, &quot;prefix&quot;, TCL_GLOBAL_ONLY), 2);
-            /* If there is no SDK we will allow everything in /usr /System/Library etc, else add binaries to allow, and redirect root to SDK. */
-            if (sdk &amp;&amp; *sdk) {
-                char buf[260];
-                buf[0] = '\0';
-                strlcat(buf, Tcl_GetVar(interp, &quot;developer_dir&quot;, TCL_GLOBAL_ONLY), 260);
-                strlcat(buf, &quot;/SDKs/&quot;, 260);
-                strlcat(buf, sdk, 260);
-
-                append_allow(&quot;/usr/bin&quot;, 0);
-                append_allow(&quot;/usr/sbin&quot;, 0);
-                append_allow(&quot;/usr/libexec/gcc&quot;, 0);
-                append_allow(&quot;/System/Library/Perl&quot;, 0);
-                append_allow(&quot;/&quot;, 1);
-                strlcpy(t - 1, buf, remaining);
-                t += strlen(t) + 1;
-            } else {
-                append_allow(&quot;/usr&quot;, 0);
-                append_allow(&quot;/System/Library&quot;, 0);
-                append_allow(&quot;/Library&quot;, 0);
-                append_allow(Tcl_GetVar(interp, &quot;developer_dir&quot;, TCL_GLOBAL_ONLY), 0);
-            }
-        } else {
-            append_allow(&quot;/&quot;, 0);
-        }
-        append_allow(&quot;&quot;, 0);
-        filemap_end = t;
-#       undef append_allow
</del><ins>+    if (enable_fence) {
+        answer_s(sock, sandbox, sandboxLength);
+    } else {
+        char allowAllSandbox[5] = {'/', '\0', FILEMAP_ALLOW, '\0', '\0'};
+        answer_s(sock, allowAllSandbox, sizeof(allowAllSandbox));
</ins><span class="cx">     }
</span><del>-
-    answer_s(sock, filemap, filemap_end - filemap);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> /**
</span><span class="lines">@@ -381,9 +376,22 @@
</span><span class="cx">  * \param[in] sock socket reporting the violation; unused.
</span><span class="cx">  * \param[in] path the offending path to be passed to the callback
</span><span class="cx">  */
</span><del>-static void sandbox_violation(int sock UNUSED, const char *path) {
</del><ins>+static void sandbox_violation(int sock UNUSED, const char *path, sandbox_violation_t type) {
</ins><span class="cx">     Tcl_SetVar(interp, &quot;path&quot;, path, 0);
</span><del>-    Tcl_Eval(interp, &quot;slave_add_sandbox_violation $path&quot;);
</del><ins>+    int retVal = TCL_OK;
+    switch (type) {
+        case SANDBOX_VIOLATION:
+            retVal = Tcl_Eval(interp, &quot;slave_add_sandbox_violation $path&quot;);
+            break;
+        case SANDBOX_UNKNOWN:
+            retVal = Tcl_Eval(interp, &quot;slave_add_sandbox_unknown $path&quot;);
+            break;
+    }
+
+    if (retVal != TCL_OK) {
+        fprintf(stderr, &quot;Error evaluating Tcl statement to add sandbox violation: %s\n&quot;, Tcl_GetStringResult(interp));
+    }
+
</ins><span class="cx">     Tcl_UnsetVar(interp, &quot;path&quot;, 0);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -781,9 +789,6 @@
</span><span class="cx">         unlink(name);
</span><span class="cx">         safe_free(name);
</span><span class="cx">     }
</span><del>-    if (filemap) {
-        safe_free(filemap);
-    }
</del><span class="cx">     if (depends) {
</span><span class="cx">         safe_free(depends);
</span><span class="cx">     }
</span><span class="lines">@@ -838,10 +843,6 @@
</span><span class="cx"> 
</span><span class="cx"> static int TracelibEnableFence(Tcl_Interp *interp UNUSED) {
</span><span class="cx">     enable_fence = 1;
</span><del>-    if (filemap) {
-        free(filemap);
-    }
-    filemap = 0;
</del><span class="cx">     return TCL_OK;
</span><span class="cx"> }
</span><span class="cx"> #endif /* defined(HAVE_TRACEMODE_SUPPORT) */
</span></span></pre></div>
<a id="branchesgsoc14interactivebasesrcportporttcl"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/src/port/port.tcl (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/port/port.tcl        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/src/port/port.tcl        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -2725,7 +2725,23 @@
</span><span class="cx">     return $status
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+proc action_doctor { action portlist opts } {
+    if {[prefix_unwritable]} {
+        return 1
+    }
+    macports::doctor_main $opts
+    return 0
+}
</ins><span class="cx"> 
</span><ins>+proc action_reclaim { action portlist opts } {
+    if {[prefix_unwritable]} {
+        return 1
+    }
+    macports::reclaim_main  
+    return 0
+}
+
+
</ins><span class="cx"> proc action_upgrade { action portlist opts } {
</span><span class="cx">     if {[require_portlist portlist &quot;yes&quot;] || ([prefix_unwritable] &amp;&amp; ![macports::global_option_isset ports_dryrun])} {
</span><span class="cx">         return 1
</span><span class="lines">@@ -4205,6 +4221,8 @@
</span><span class="cx">     \
</span><span class="cx">     upgrade     [list action_upgrade        [ACTION_ARGS_PORTS]] \
</span><span class="cx">     rev-upgrade [list action_revupgrade     [ACTION_ARGS_NONE]] \
</span><ins>+    reclaim     [list action_reclaim        [ACTION_ARGS_NONE]] \
+    doctor      [list action_doctor         [ACTION_ARGS_NONE]] \
</ins><span class="cx">     \
</span><span class="cx">     version     [list action_version        [ACTION_ARGS_NONE]] \
</span><span class="cx">     platform    [list action_platform       [ACTION_ARGS_NONE]] \
</span><span class="lines">@@ -4260,7 +4278,6 @@
</span><span class="cx">     mdmg        [list action_target         [ACTION_ARGS_PORTS]] \
</span><span class="cx">     mpkg        [list action_target         [ACTION_ARGS_PORTS]] \
</span><span class="cx">     pkg         [list action_target         [ACTION_ARGS_PORTS]] \
</span><del>-    portpkg     [list action_target         [ACTION_ARGS_PORTS]] \
</del><span class="cx">     \
</span><span class="cx">     quit        [list action_exit           [ACTION_ARGS_NONE]] \
</span><span class="cx">     exit        [list action_exit           [ACTION_ARGS_NONE]] \
</span><span class="lines">@@ -4365,6 +4382,7 @@
</span><span class="cx">     log         {{phase 1} {level 1}}
</span><span class="cx">     upgrade     {force enforce-variants no-replace no-rev-upgrade}
</span><span class="cx">     rev-upgrade {id-loadcmd-check}
</span><ins>+    doctor      {quiet}
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ##
</span></span></pre></div>
<a id="branchesgsoc14interactivebasesrcport10portfetchtcl"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/src/port1.0/portfetch.tcl (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/port1.0/portfetch.tcl        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/src/port1.0/portfetch.tcl        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -428,7 +428,7 @@
</span><span class="cx">            git.url git.branch git.sha1 git.cmd
</span><span class="cx"> 
</span><span class="cx">     set options &quot;-q&quot;
</span><del>-    if {[string length ${git.branch}] == 0} {
</del><ins>+    if {${git.branch} eq &quot;&quot;} {
</ins><span class="cx">         # if we're just using HEAD, we can make a shallow repo
</span><span class="cx">         set options &quot;$options --depth=1&quot;
</span><span class="cx">     }
</span><span class="lines">@@ -438,7 +438,7 @@
</span><span class="cx">         return -code error [msgcat::mc &quot;Git clone failed&quot;]
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if {[string length ${git.branch}] &gt; 0} {
</del><ins>+    if {${git.branch} ne &quot;&quot;} {
</ins><span class="cx">         set env &quot;GIT_DIR=${worksrcpath}/.git GIT_WORK_TREE=${worksrcpath}&quot;
</span><span class="cx">         set cmdstring &quot;$env ${git.cmd} checkout -q ${git.branch} 2&gt;&amp;1&quot;
</span><span class="cx">         ui_debug &quot;Executing $cmdstring&quot;
</span></span></pre></div>
<a id="branchesgsoc14interactivebasesrcport10porttracetcl"></a>
<div class="modfile"><h4>Modified: branches/gsoc14-interactive/base/src/port1.0/porttrace.tcl (124235 => 124236)</h4>
<pre class="diff"><span>
<span class="info">--- branches/gsoc14-interactive/base/src/port1.0/porttrace.tcl        2014-08-21 17:17:31 UTC (rev 124235)
+++ branches/gsoc14-interactive/base/src/port1.0/porttrace.tcl        2014-08-21 17:47:06 UTC (rev 124236)
</span><span class="lines">@@ -37,329 +37,455 @@
</span><span class="cx"> package require portutil 1.0
</span><span class="cx"> 
</span><span class="cx"> namespace eval porttrace {
</span><del>-}
</del><ins>+        ##
+        # The fifo currently used as server socket to establish communication
+        # between traced processes and the server-side of trace mode.
+        variable fifo
</ins><span class="cx"> 
</span><del>-proc porttrace::trace_start {workpath} {
-    global os.platform developer_dir macportsuser
-    if {${os.platform} == &quot;darwin&quot;} {
-        if {[catch {package require Thread} error]} {
-            ui_warn &quot;trace requires Tcl Thread package ($error)&quot;
-        } else {
-            global env trace_fifo trace_sandboxbounds portpath distpath altprefix
-            # Create a fifo.
-            # path in unix socket limited to 109 chars
-            # # set trace_fifo &quot;$workpath/trace_fifo&quot;
-            set trace_fifo &quot;/tmp/macports_trace_[pid]-[expr {int(rand()*1000)}]&quot;
-            file delete -force $trace_fifo
</del><ins>+        ##
+        # The Tcl thread that runs the server side of trace mode and deals with
+        # requests from traced processes.
+        variable thread
</ins><span class="cx"> 
</span><del>-            # Create the thread/process.
-            create_slave $workpath $trace_fifo
</del><ins>+        ##
+        # A list of files to which access was denied by trace mode.
+        variable sandbox_violation_list [list]
</ins><span class="cx"> 
</span><del>-            # Launch darwintrace.dylib.
</del><ins>+        ##
+        # A list of files inside the MacPorts prefix but unknown to MacPorts that
+        # were used by the current trace session.
+        variable sandbox_unknown_list [list]
</ins><span class="cx"> 
</span><del>-            set tracelib_path [file join ${portutil::autoconf::tcl_package_path} darwintrace1.0 darwintrace.dylib]
</del><ins>+    proc appendEntry {sandbox path action} {
+        upvar 2 $sandbox sndbxlst
</ins><span class="cx"> 
</span><del>-            if {[info exists env(DYLD_INSERT_LIBRARIES)] &amp;&amp; [string length &quot;$env(DYLD_INSERT_LIBRARIES)&quot;] &gt; 0} {
-                set env(DYLD_INSERT_LIBRARIES) &quot;${env(DYLD_INSERT_LIBRARIES)}:${tracelib_path}&quot;
-            } else {
-                set env(DYLD_INSERT_LIBRARIES) ${tracelib_path}
-            }
-            set env(DARWINTRACE_LOG) &quot;$trace_fifo&quot;
-            # The sandbox is limited to:
-            # workpath
-            # /tmp
-            # /private/tmp
-            # /var/tmp
-            # /private/var/tmp
-            # $TMPDIR
-            # /dev/null
-            # /dev/tty
-            # /Library/Caches/com.apple.Xcode
-            # $CCACHE_DIR
-            # $HOMEDIR/.ccache
-            set trace_sandbox [list \
-            $workpath \
-            $portpath \
-            $distpath \
-            /tmp \
-            /private/tmp \
-            /var/tmp \
-            /private/var/tmp \
-            /var/folders \
-            /private/var/folders \
-            /var/empty \
-            /private/var/empty \
-            /var/run \
-            /private/var/run \
-            /var/db/xcode_select_link \
-            /private/var/db/xcode_select_link \
-            /var/db/mds \
-            /private/var/db/mds \
-            /var/db/launchd.db \
-            /private/var/db/launchd.db \
-            [file normalize ~${macportsuser}/Library/Preferences/com.apple.dt.Xcode.plist] \
-            &quot;$env(HOME)/Library/Preferences/com.apple.dt.Xcode.plist&quot; \
-            /Library/Caches/com.apple.Xcode \
-            /Library/LaunchDaemons \
-            /Library/LaunchAgents \
-            /dev \
-            /etc/passwd \
-            /etc/groups \
-            /etc/localtime \
-            [file normalize ${developer_dir}/../..] \
-            &quot;$env(HOME)/.ccache&quot;]
-            if {[info exists env(TMPDIR)]} {
-                lappend trace_sandbox $env(TMPDIR)
-            }
-            if {[info exists env(CCACHE_DIR)]} {
-                lappend trace_sandbox $env(CCACHE_DIR)
-            }
</del><ins>+        set mapping {}
+        # Escape backslashes with backslashes
+        lappend mapping &quot;\\&quot; &quot;\\\\&quot;
+        # Escape colons with \:
+        lappend mapping &quot;:&quot; &quot;\\:&quot;
+        # Escape equal signs with \=
+        lappend mapping &quot;=&quot; &quot;\\=&quot;
</ins><span class="cx"> 
</span><del>-            ui_debug &quot;Tracelib Sandbox is:&quot;
-            foreach sandbox $trace_sandbox {
-                ui_debug &quot;\t$sandbox&quot;
-            }
-            set trace_sandboxbounds [join $trace_sandbox :]
-            tracelib setsandbox $trace_sandboxbounds
</del><ins>+        set normalizedPath [file normalize $path]
+        lappend sndbxlst &quot;[string map $mapping $path]=$action&quot;
+        if {$normalizedPath ne $path} {
+            lappend sndbxlst &quot;[string map $mapping $normalizedPath]=$action&quot;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><del>-}
</del><span class="cx"> 
</span><del>-# Enable the fence.
-# Only done for targets that should only happen in the sandbox.
-proc porttrace::trace_enable_fence {} {
-    tracelib enablefence
-}
</del><ins>+    ##
+    # Append a trace sandbox entry suitable for allowing access to
+    # a directory to a given sandbox list.
+    #
+    # @param sandbox The name of the sandbox list variable
+    # @param path The path that should be permitted
+    proc allow {sandbox path} {
+        appendEntry $sandbox $path &quot;+&quot;
+    }
</ins><span class="cx"> 
</span><del>-# Check the list of ports.
-# Output a warning for every port the trace revealed a dependency on
-# that isn't included in portslist
-# This method must be called after trace_start
-proc porttrace::trace_check_deps {target portslist} {
-    # Get the list of ports.
-    set ports [slave_send porttrace::slave_get_ports]
</del><ins>+    ##
+    # Append a trace sandbox entry suitable for denying access to a directory
+    # (and stopping processing of the sandbox) to a given sandbox list.
+    #
+    # @param sandbox The name of the sandbox list variable
+    # @param path The path that should be denied
+    proc deny {sandbox path} {
+        appendEntry $sandbox $path &quot;-&quot;
+    }
</ins><span class="cx"> 
</span><del>-    # Compare with portslist
-    set portslist [lsort $portslist]
-    foreach port $ports {
-        if {[lsearch -sorted -exact $portslist $port] == -1} {
-            ui_warn &quot;Target $target has an undeclared dependency on $port&quot;
-        }
</del><ins>+    ##
+    # Append a trace sandbox entry suitable for deferring the access decision
+    # back to MacPorts to query for dependencies to a given sandbox list.
+    #
+    # @param sandbox The name of the sandbox list variable
+    # @param path The path that should be handed back to MacPorts for further
+    #             processing.
+    proc ask {sandbox path} {
+        appendEntry $sandbox $path &quot;?&quot;
</ins><span class="cx">     }
</span><del>-    foreach port $portslist {
-        if {[lsearch -sorted -exact $ports $port] == -1} {
-            ui_debug &quot;Target $target has no traceable dependency on $port&quot;
-        }
-    }
-}
</del><span class="cx"> 
</span><del>-# Check that no violation happened.
-# Output a warning for every sandbox violation the trace revealed.
-# This method must be called after trace_start
-proc porttrace::trace_check_violations {} {
-    # Get the list of violations.
-    set violations [slave_send porttrace::slave_get_sandbox_violations]
</del><ins>+        ##
+        # Start a trace mode session with the given $workpath. Creates a thread to
+        # handle requests from traced processes and sets up the sandbox bounds. You
+        # must call trace_stop once for each call to trace_start after you're done
+        # tracing processes.
+        #
+        # @param workpath The $workpath of the current installation
+        proc trace_start {workpath} {
+                global \
+                        altprefix developer_dir distpath env macportsuser os.platform \
+                        portpath prefix
</ins><span class="cx"> 
</span><del>-    foreach violation [lsort -unique $violations] {
-        ui_warn &quot;An activity was attempted outside sandbox: $violation&quot;
-    }
-}
</del><ins>+                variable fifo
</ins><span class="cx"> 
</span><del>-# Stop the trace and return the list of ports the port depends on.
-# This method must be called after trace_start
-proc porttrace::trace_stop {} {
-    global os.platform
-    if {${os.platform} == &quot;darwin&quot;} {
-        global env trace_fifo macosx_version
-        foreach var {DYLD_INSERT_LIBRARIES DARWINTRACE_LOG} {
-            array unset env $var
-            if {$macosx_version eq &quot;10.5&quot;} {
-                unsetenv $var
-            }
-        }
</del><ins>+                if {[catch {package require Thread} error]} {
+                        ui_warn &quot;Trace mode requires Tcl Thread package ($error)&quot;
+                        return 0
+                }
</ins><span class="cx"> 
</span><del>-        #kill socket
-        tracelib clean
</del><ins>+                # Select a name for the socket to be used to communicate with the
+                # processes being traced. Note that Unix sockets are limited to 109
+                # characters and that the the macports user must be able to connect to
+                # the socket (and in case of non-root installations, the current user,
+                # too). We're not prefixing the path in /tmp with a separate
+                # macports-specific directory, because the might not be writable by all
+                # users.
+                set fifo &quot;/tmp/macports-trace-[pid]-[expr {int(rand() * 10000)}]&quot;
</ins><span class="cx"> 
</span><del>-        # Clean up.
-        slave_send porttrace::slave_stop
</del><ins>+                # Make sure the socket doesn't exist yet (this would cause errors
+                # later)
+                file delete -force $fifo
</ins><span class="cx"> 
</span><del>-        # Delete the slave.
-        delete_slave
</del><ins>+                # Create the server-side of the trace socket; this will handle requests
+                # from the traced processed.
+                create_slave $workpath $fifo
</ins><span class="cx"> 
</span><del>-        file delete -force $trace_fifo
</del><ins>+                # Launch darwintrace.dylib.
+                set tracelib [file join ${portutil::autoconf::tcl_package_path} darwintrace1.0 darwintrace.dylib]
+
+                # Add darwintrace.dylib as last entry in DYLD_INSERT_LIBRARIES
+                if {[info exists env(DYLD_INSERT_LIBRARIES)] &amp;&amp; [string length $env(DYLD_INSERT_LIBRARIES)] &gt; 0} {
+                        set env(DYLD_INSERT_LIBRARIES) &quot;${env(DYLD_INSERT_LIBRARIES)}:${tracelib}&quot;
+                } else {
+                        set env(DYLD_INSERT_LIBRARIES) ${tracelib}
+                }
+                # Tell traced processes where to find their communication socket back
+                # to this code.
+                set env(DARWINTRACE_LOG) $fifo
+
+                # The sandbox is limited to:
+                set trace_sandbox [list]
+
+                # Allow work-, port-, and distpath
+                allow trace_sandbox $workpath
+                allow trace_sandbox $portpath
+                allow trace_sandbox $distpath
+
+                # Allow standard system directories
+                allow trace_sandbox &quot;/bin&quot;
+                allow trace_sandbox &quot;/sbin&quot;
+                allow trace_sandbox &quot;/dev&quot;
+                allow trace_sandbox &quot;/usr/bin&quot;
+                allow trace_sandbox &quot;/usr/sbin&quot;
+                allow trace_sandbox &quot;/usr/include&quot;
+                allow trace_sandbox &quot;/usr/lib&quot;
+                allow trace_sandbox &quot;/usr/libexec&quot;
+                allow trace_sandbox &quot;/usr/share&quot;
+                allow trace_sandbox &quot;/System/Library&quot;
+                # Deny /Library/Frameworks, third parties install there
+                deny  trace_sandbox &quot;/Library/Frameworks&quot;
+                # But allow the rest of /Library
+                allow trace_sandbox &quot;/Library&quot;
+
+                # Allow a few configuration files
+                allow trace_sandbox &quot;/etc/passwd&quot;
+                allow trace_sandbox &quot;/etc/groups&quot;
+                allow trace_sandbox &quot;/etc/localtime&quot;
+
+                # Allow temporary locations
+                allow trace_sandbox &quot;/tmp&quot;
+                allow trace_sandbox &quot;/var/tmp&quot;
+                allow trace_sandbox &quot;/var/folders&quot;
+                allow trace_sandbox &quot;/var/empty&quot;
+                allow trace_sandbox &quot;/var/run&quot;
+                if {[info exists env(TMPDIR)]} {
+                        set tmpdir [string trim $env(TMPDIR)]
+                        if {$tmpdir ne &quot;&quot;} {
+                                allow trace_sandbox $tmpdir
+                        }
+                }
+
+                # Allow access to some Xcode specifics
+                allow trace_sandbox &quot;/var/db/xcode_select_link&quot;
+                allow trace_sandbox &quot;/var/db/mds&quot;
+                allow trace_sandbox [file normalize ~${macportsuser}/Library/Preferences/com.apple.dt.Xcode.plist]
+                allow trace_sandbox &quot;$env(HOME)/Library/Preferences/com.apple.dt.Xcode.plist&quot;
+
+                # Allow access to developer_dir; however, if it ends with /Contents/Developer, strip
+                # that. If it doesn't leave that in place to avoid allowing access to &quot;/&quot;!
+                set ddsplit [file split [file normalize [file join ${developer_dir} &quot;..&quot; &quot;..&quot;]]]
+                if {[llength $ddsplit] &gt; 2 &amp;&amp; [lindex $ddsplit end-1] eq &quot;Contents&quot; &amp;&amp; [lindex $ddsplit end] eq &quot;Developer&quot;} {
+                        set ddsplit [lrange $ddsplit 0 end-2]
+                }
+                allow trace_sandbox [file join {*}$ddsplit]
+
+                # Allow launchd.db access to avoid failing on port-load(1)/port-unload(1)/port-reload(1)
+                allow trace_sandbox &quot;/var/db/launchd.db&quot;
+
+                # Deal with ccache
+                allow trace_sandbox &quot;$env(HOME)/.ccache&quot;
+                if {[info exists env(CCACHE_DIR)]} {
+                        set ccachedir [string trim $env(CCACHE_DIR)]
+                        if {$ccachedir ne &quot;&quot;} {
+                                allow trace_sandbox $ccachedir
+                        }
+                }
+
+                # Defer back to MacPorts for dependency checks inside $prefix. This must be at the end,
+                # or it'll be used instead of more specific rules.
+                ask trace_sandbox $prefix
+
+                ui_debug &quot;Tracelib Sandbox is:&quot;
+                foreach trace_entry $trace_sandbox {
+                        ui_debug &quot;\t$trace_entry&quot;
+                }
+
+                tracelib setsandbox [join $trace_sandbox :]
</ins><span class="cx">     }
</span><del>-}
</del><span class="cx"> 
</span><del>-# Private
-# Create the slave thread.
-proc porttrace::create_slave {workpath trace_fifo} {
-    global trace_thread prefix developer_dir registry.path
-    # Create the thread.
-    set trace_thread [macports_create_thread]
</del><ins>+        ##
+        # Stop the running trace session and clean up the trace helper thread and
+        # the communication socket. Just must call this once for each call to
+        # trace_start.
+        proc trace_stop {} {
+                global \
+                        env \
+                        macosx_version
</ins><span class="cx"> 
</span><del>-    # The slave thred needs this file and macports 1.0
-    thread::send $trace_thread &quot;package require porttrace 1.0&quot;
-    thread::send $trace_thread &quot;package require macports 1.0&quot;
-    # slave needs ui_{info,warn,debug,error}...
-    # make sure to sync this with ../pextlib1.0/tracelib.c!
-    thread::send $trace_thread &quot;macports::ui_init debug&quot;
-    thread::send $trace_thread &quot;macports::ui_init info&quot;
-    thread::send $trace_thread &quot;macports::ui_init warn&quot;
-    thread::send $trace_thread &quot;macports::ui_init error&quot;
-    # and these variables
-    thread::send $trace_thread &quot;set prefix \&quot;$prefix\&quot;; set developer_dir \&quot;$developer_dir\&quot;&quot;
-    # The slave thread requires the registry package.
-    thread::send $trace_thread &quot;package require registry 1.0&quot;
-    # and an open registry
-    thread::send $trace_thread &quot;registry::open [file join ${registry.path} registry registry.db]&quot;
</del><ins>+                variable fifo
</ins><span class="cx"> 
</span><del>-    # Initialize the slave
-    thread::send $trace_thread &quot;porttrace::slave_init $trace_fifo $workpath&quot;
</del><ins>+                foreach var {DYLD_INSERT_LIBRARIES DARWINTRACE_LOG} {
+                        array unset env $var
+                        if {$macosx_version eq &quot;10.5&quot;} {
+                                unsetenv $var
+                        }
+                }
</ins><span class="cx"> 
</span><del>-    # Run slave asynchronously
-    thread::send -async $trace_thread &quot;porttrace::slave_run&quot;
-}
</del><ins>+                # Kill socket
+                tracelib clean
+                # Delete the socket file
+                file delete -force $fifo
</ins><span class="cx"> 
</span><del>-# Private
-# Send a command to the thread without waiting for the result.
-proc porttrace::slave_send_async {command} {
-    global trace_thread
</del><ins>+                # Delete the slave.
+                delete_slave
+        }
</ins><span class="cx"> 
</span><del>-    thread::send -async $trace_thread &quot;$command&quot;
-}
</del><ins>+        ##
+        # Enable the sandbox. This is only called for targets that should be run
+        # inside the sandbox.
+        proc trace_enable_fence {} {
+                tracelib enablefence
+        }
</ins><span class="cx"> 
</span><del>-# Private
-# Send a command to the thread.
-proc porttrace::slave_send {command} {
-    global trace_thread
</del><ins>+        ##
+        # Print a list of sandbox violations, separated into a list of files that
+        # actually exist and were hidden, and a list of files that would have been
+        # hidden, if they existed.
+        #
+        # Also print a list of files inside the MacPorts prefix that were not
+        # installed by a port and thus not hidden, but might still cause
+        # non-repeatable builds.
+        #
+        # This method must not be called before trace_start or after trace_stop.
+        proc trace_check_violations {} {
+                # Get the list of violations and print it; separate the list into existing
+                # and non-existent files to cut down the noise.
+                set violations [slave_send porttrace::slave_get_sandbox_violations]
</ins><span class="cx"> 
</span><del>-    # ui_warn &quot;slave send $command ?&quot;
</del><ins>+                set existingFiles [list]
+                set missingFiles  [list]
+                foreach violation [lsort -unique $violations] {
+                        if {![catch {file lstat $violation _}]} {
+                                lappend existingFiles $violation
+                        } else {
+                                lappend missingFiles $violation
+                        }
+                }
</ins><span class="cx"> 
</span><del>-    thread::send $trace_thread &quot;$command&quot; result
-    return $result
-}
</del><ins>+                set existingFilesLen [llength $existingFiles]
+                if {$existingFilesLen &gt; 0} {
+                        if {$existingFilesLen &gt; 1} {
+                                ui_warn &quot;The following existing files were hidden from the build system by trace mode:&quot;
+                        } else {
+                                ui_warn &quot;The following existing file was hidden from the build system by trace mode:&quot;
+                        }
+                        foreach violation $existingFiles {
+                                ui_msg &quot;  $violation&quot;
+                        }
+                }
</ins><span class="cx"> 
</span><del>-# Private
-# Destroy the thread.
-proc porttrace::delete_slave {} {
-    global trace_thread
</del><ins>+                set missingFilesLen [llength $missingFiles]
+                if {$missingFilesLen &gt; 0} {
+                        if {$missingFilesLen &gt; 1} {
+                                ui_info &quot;The following files would have been hidden from the build system by trace mode if they existed:&quot;
+                        } else {
+                                ui_info &quot;The following file would have been hidden from the build system by trace mode if it existed:&quot;
+                        }
+                        foreach violation $missingFiles {
+                                ui_info &quot;  $violation&quot;
+                        }
+                }
</ins><span class="cx"> 
</span><del>-    # Destroy the thread.
-    thread::release $trace_thread
-}
</del><ins>+                set unknowns [slave_send porttrace::slave_get_sandbox_unknowns]
+                set existingUnknowns [list]
+                foreach unknown [lsort -unique $unknowns] {
+                        if {![catch {file lstat $unknown _}]} {
+                                lappend existingUnknowns $unknown
+                        }
+                        # We don't care about files that don't exist inside MacPorts' prefix
+                }
</ins><span class="cx"> 
</span><del>-# Private.
-# Slave method to read a line from the trace.
-proc porttrace::slave_read_line {chan} {
-    global ports_list trace_filemap sandbox_violation_list workpath env
</del><ins>+                set existingUnknownsLen [llength $existingUnknowns]
+                if {$existingUnknownsLen &gt; 0} {
+                        if {$existingUnknownsLen &gt; 1} {
+                                ui_warn &quot;The following files inside the MacPorts prefix not installed by a port were accessed:&quot;
+                        } else {
+                                ui_warn &quot;The following file inside the MacPorts prefix not installed by a port was accessed:&quot;
+                        }
+                        foreach unknown $existingUnknowns {
+                                ui_msg &quot;  $unknown&quot;
+                        }
+                }
+        }
</ins><span class="cx"> 
</span><del>-    while 1 {
-        # We should never get EOF, actually.
-        if {[eof $chan]} {
-            break
-        }
</del><ins>+        ##
+        # Create a thread that will contain the server-side of a macports trace
+        # mode setup. This part of the code (most of it actually implemented in
+        # pextlib1.0/tracelib.c) will create a Unix socket that all traced
+        # processes will initially connect to to get the sandbox bounds. It will
+        # also handle requests for dependency checks from traced processes and
+        # provide the appropriate answers to the client and track sandbox
+        # violations.
+        #
+        # You must call delete_slave to clean up the data structures associated
+        # with this slave thread.
+        #
+        # @param workpath The workpath of this installation
+        # @param fifo The Unix socket name to be created
+        proc create_slave {workpath fifo} {
+                global prefix developer_dir registry.path
+                variable thread
</ins><span class="cx"> 
</span><del>-        # The line is of the form: verb\tpath
-        # Get the path by chopping it.
-        set theline [gets $chan]
</del><ins>+                # Create the thread.
+                set thread [macports_create_thread]
</ins><span class="cx"> 
</span><del>-        if {[fblocked $chan]} {
-            # Exit the loop.
-            break
-        }
</del><ins>+                # The slave thred needs this file and macports 1.0
+                thread::send $thread &quot;package require porttrace 1.0&quot;
+                thread::send $thread &quot;package require macports 1.0&quot;
</ins><span class="cx"> 
</span><del>-        set line_length [string length $theline]
</del><ins>+                # slave needs ui_{info,warn,debug,error}...
+                # make sure to sync this with ../pextlib1.0/tracelib.c!
+                thread::send $thread &quot;macports::ui_init debug&quot;
+                thread::send $thread &quot;macports::ui_init info&quot;
+                thread::send $thread &quot;macports::ui_init warn&quot;
+                thread::send $thread &quot;macports::ui_init error&quot;
</ins><span class="cx"> 
</span><del>-        # Skip empty lines.
-        if {$line_length &gt; 0} {
-            set path_start [expr {[string first &quot;\t&quot; $theline] + 1}]
-            set op [string range $theline 0 [expr {$path_start - 2}]]
-            set path [string range $theline $path_start [expr {$line_length - 1}]]
</del><ins>+                # and these variables
+                thread::send $thread &quot;set prefix \&quot;$prefix\&quot;; set developer_dir \&quot;$developer_dir\&quot;&quot;
+                # The slave thread requires the registry package.
+                thread::send $thread &quot;package require registry 1.0&quot;
+                # and an open registry
+                thread::send $thread &quot;registry::open [file join ${registry.path} registry registry.db]&quot;
</ins><span class="cx"> 
</span><del>-            # open/execve
-            if {$op eq &quot;open&quot; || $op eq &quot;execve&quot;} {
-                # Only work on files.
-                if {[file isfile $path]} {
-                    # Did we process the file yet?
-                    if {![filemap exists trace_filemap $path]} {
-                        # Obtain information about this file.
-                        set port [registry::file_registered $path]
-                        if { $port != 0 } {
-                            # Add the port to the list.
-                            if {[lsearch -sorted -exact $ports_list $port] == -1} {
-                                lappend ports_list $port
-                                set ports_list [lsort $ports_list]
-                                # Maybe fill trace_filemap for efficiency?
-                            }
-                        }
</del><ins>+                # Initialize the slave
+                thread::send $thread &quot;porttrace::slave_init $fifo $workpath&quot;
</ins><span class="cx"> 
</span><del>-                        # Add the file to the tree with port information.
-                        # Ignore errors. Errors can occur if a directory was
-                        # created where a file once lived.
-                        # This doesn't affect existing ports and we just
-                        # add this information to speed up port detection.
-                        catch {filemap set trace_filemap $path $port}
-                    }
-                }
-            } elseif {$op eq &quot;sandbox_violation&quot;} {
-                lappend sandbox_violation_list $path
-            }
-        }
-    }
-}
</del><ins>+                # Run slave asynchronously
+                thread::send -async $thread &quot;porttrace::slave_run&quot;
+        }
</ins><span class="cx"> 
</span><del>-# Private.
-# Slave init method.
-proc porttrace::slave_init {fifo p_workpath} {
-    global ports_list trace_filemap sandbox_violation_list
-    # Save the workpath.
-    set workpath $p_workpath
-    # Create a virtual filemap.
-    filemap create trace_filemap
-    set ports_list {}
-    set sandbox_violation_list {}
-    tracelib setname $fifo
</del><ins>+        ##
+        # Initialize the slave thread. This is the first user code called in the
+        # thread after creating it and setting it up.
+        #
+        # @param fifo The path of the Unix socket that should be created by
+        #             tracelib
+        # @param p_workpath The workpath of the current installation
+        proc slave_init {fifo p_workpath} {
+                variable sandbox_violation_list
+                variable sandbox_unknown_list
</ins><span class="cx"> 
</span><del>-    if {[catch {tracelib opensocket} err]} {
-        global errorInfo
-        ui_warn &quot;Error in tracelib: $err&quot;
-        ui_debug &quot;Backtrace: $errorInfo&quot;
-    }
-}
</del><ins>+                # Save the workpath.
+                set workpath $p_workpath
</ins><span class="cx"> 
</span><del>-proc porttrace::slave_run {} {
-    if {[catch {tracelib run} err]} {
-        global errorInfo
-        ui_warn &quot;Error in tracelib: $err&quot;
-        ui_debug &quot;Backtrace: $errorInfo&quot;
-    }
-}
</del><ins>+                # Initialize the sandbox violation lists
+                set sandbox_violation_list {}
+                set sandbox_unknown_list {}
</ins><span class="cx"> 
</span><del>-# Private.
-# Slave cleanup method.
-proc porttrace::slave_stop {} {
-    global trace_filemap
-    # Close the virtual filemap.
-    filemap close trace_filemap
-    # Close the pipe (both ends).
-}
</del><ins>+                # Create the socket
+                tracelib setname $fifo
+                tracelib opensocket
+        }
</ins><span class="cx"> 
</span><del>-# Private.
-# Slave ports export method.
-proc porttrace::slave_get_ports {} {
-    global ports_list
-    return $ports_list
-}
</del><ins>+        ##
+        # Actually start the server component that will deal with requests from
+        # trace mode clients. This will occupy the thread until a different thread
+        # calls tracelib closesocket or tracelib clean.
+        proc slave_run {} {
+                tracelib run
+        }
</ins><span class="cx"> 
</span><del>-# Private.
-# Slave sandbox violations export method.
-proc porttrace::slave_get_sandbox_violations {} {
-    global sandbox_violation_list
-    return $sandbox_violation_list
-}
</del><ins>+        ##
+        # Destroy the slave thread. You must call this once for each call to
+        # create_slave.
+        proc delete_slave {} {
+                variable thread
</ins><span class="cx"> 
</span><del>-proc porttrace::slave_add_sandbox_violation {path} {
-    global sandbox_violation_list
-    lappend sandbox_violation_list $path
</del><ins>+                # Destroy the thread.
+                thread::release $thread
+        }
+
+        ##
+        # Send a command to the trace thread created by create_slave, wait for its
+        # completion and return its result. The behavior of this proc is undefined
+        # when called before create_slave or after delete_slave.
+        #
+        # @param command The Tcl command to be executed in the trace thread
+        # @return The return value of the Tcl command, executed in the trace thread
+        proc slave_send {command} {
+                variable thread
+
+                thread::send $thread &quot;$command&quot; result
+                return $result
+        }
+
+        ##
+        # Return a list of sandbox violations stored in the trace server thread.
+        #
+        # @return List of files that the traced processed tried to access but were
+        #         outside the sandbox bounds.
+        proc slave_get_sandbox_violations {} {
+                variable sandbox_violation_list
+
+                return $sandbox_violation_list
+        }
+
+        ##
+        # Add a sandbox violation. This is called directly from
+        # pextlib1.0/tracelib.c. You won't find calls to this method in Tcl code.
+        #
+        # @param path The path of the file that a traced process tried to access
+        #             but violated the sandbox bounds.
+        proc slave_add_sandbox_violation {path} {
+                variable sandbox_violation_list
+
+                lappend sandbox_violation_list $path
+        }
+
+        ##
+        # Return a list of files accessed inside the MacPorts prefix but not
+        # registered to any port.
+        #
+        # @return List of files that the traced processed tried to access but
+        #         couldn't be matched to a port by MacPorts.
+        proc slave_get_sandbox_unknowns {} {
+                variable sandbox_unknown_list
+
+                return $sandbox_unknown_list
+        }
+
+        ##
+        # Track an access to a file within the MacPorts prefix that MacPorts
+        # doesn't know about. This is called directly from pextlib1.0/tracelib.c.
+        # You won't find calls to this method in Tcl code.
+        #
+        # @param path The path of the file that a traced process tried to access
+        #             inside the MacPorts prefix, but MacPorts couldn't match to
+        #             a port.
+        proc slave_add_sandbox_unknown {path} {
+                variable sandbox_unknown_list
+
+                lappend sandbox_unknown_list $path
+        }
</ins><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>