<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta content="application/xhtml+xml; charset=UTF-8"
        http-equiv="Content-Type" />
  <title>Piston ~ Easy Vendor Branch Management</title>
  <link rel="Stylesheet" href="base.css" />
</head>
<body id="caveats">
<div id="header">
  <div id="logo">
    <img src="images/top-logo.jpg" alt="Piston Logo" width="160" height="200" />
  </div>

  <div id="title">
    <img src="images/piston.png" alt="Piston" width="280" height="87" />
  </div>

  <div id="tagline">
    <img src="images/tagline.png" alt="Easy Vendor Branch Management" width="375" height="27" />
  </div>
</div>

<div id="main">
<div id="nav">
  <ul id="navigator">
    <li><a href="index.html" id="target-index">Home</a></li>
    <li><a href="usage.html" id="target-usage">Daily Usage</a></li>
    <li><a href="details.html" id="target-details">Operational Details</a></li>
    <li><a href="contributions.html" id="target-contributions">Contributions</a></li>
    <li><a href="caveats.html" id="target-caveats">Caveats</a></li>
    <li><a href="dependencies.html" id="target-dependencies">Dependencies</a></li>
    <li><a href="properties.html" id="target-properties">SVN Properties</a></li>
    <li><a href="links.html" id="target-links">Links</a></li>
    <li><a href="http://rubyforge.org/projects/piston" id="target-rubyforge">RubyForge</a></li>
  </ul>
</div>

<div id="content">
<h1>Caveats</h1>

<h2>Speed</h2>

<p>Piston is <strong>slow</strong>. The update process particularly so. Piston uses a brute force approach to merging the remote repository's content. Subversion cannot merge from remote repositories, so instead Piston checks out the folder at the initial revision, and then updates to the target revision, parsing the results and replaying the changes locally.</p>

<p>If a file was locally modified, its changes will be merged back in. If that produces a conflict, Piston will not detect it. However, the next commit will be rejected by Subversion.</p>

<h2 id="copies-and-renames">Copies &amp; Renames</h2>

<p>Piston <em>does not</em> track copies or renames. Since Subversion does renames in two phases (copy + delete), that is what Piston does.</p>

<h2>Local Operations Only</h2>

<p>Piston only works if you have a working copy. It also never commits your working copy directly. You are responsible for reviewing the changes and applying any pending fixes.</p>

<h2>Remote Repository UUID</h2>

<p>Piston caches the remote repository's UUID, allowing it to know if the remote repository is still the same. Piston refuses to work against a different repository than the one we checked out from originally.</p>

<h1>SVN Properties Used</h1>

<dl class="properties">
  <dt>piston:uuid</dt>
  <dd>
    <p>The remote repository's UUID, which we always confirm before doing any operations.</p>
  </dd>
  <dt>piston:root</dt>
  <dd>
    <p>The repository root URL from which this Piston folder was exported from.</p>
  </dd>
  <dt>piston:remote-revision</dt>
  <dd>
    <p>The <tt>Last Changed Rev</tt> of the remote repository.
    </p>
  </dd>
  <dt>piston:local-revision</dt>
  <dd>
    <p>The <tt>Last Changed Rev</tt> of the Piston managed folder, to enable us to know if we need to do any merging.
    </p>
  </dd>
  <dt>piston:locked</dt>
  <dd>
    <p>The revision at which this folder is locked. If this property is set and non-blank, Piston will skip the folder with an appropriate message.</p>
  </dd>
</dl>
</div>
</div>

<div id="bottom">
  <div id="copyright">
    <p id="spacer">&nbsp;</p>
    <p>Copyright 2006, <a href="http://blog.teksol.info/pages/bio">François Beausoleil</a></p>
    <p><a href="http://piston.rubyforge.org/">Piston</a> &mdash; Remote Repository Copying</p>
  </div>

  <div id="bottom-logo">
    <img src="images/bottom-logo.jpg" alt="Piston Logo 2" width="189" height="140" />
  </div>
</div>
</body>
</html>

