+<?php
+
+abstract class MTrack_SCM_WorkingCopy {
+ public $dir;
+
+ /** returns the root dir of the working copy */
+ function getDir() {
+ return $this->dir;
+ }
+
+ /** add a file to the working copy */
+ abstract function addFile($path);
+ /** removes a file from the working copy */
+ abstract function delFile($path);
+ /** commit changes that are pending in the working copy */
+ abstract function commit($CS);
+ /** get an MTrackSCMFile representation of a file */
+ abstract function getFile($path);
+
+ /** enumerates files in a path in the working copy */
+ function enumFiles($path)
+ {
+ return scandir($this->dir . DIRECTORY_SEPARATOR . $path);
+ }
+
+ /** determines if a file exists in the working copy */
+ function file_exists($path)
+ {
+ return file_exists($this->dir . DIRECTORY_SEPARATOR . $path);
+ }
+
+ function __destruct()
+ {
+ if (strlen($this->dir) > 1) {
+ require_once 'System.php';
+
+ //System::rm('-r', $this->dir);
+ }
+ }
+
+ function rmdir($dir) {
+ require_once 'System.php';
+ $rm = System::which('rm');
+ $cmd = "$rm -rf " . escapeshellarg($dir);
+ `$cmd`;
+
+
+ }
+
+ function generateTempDir()
+ {
+
+ $tn = '/var/lib/php5/mtrackworkingdirlEwD96a';
+ if (file_exists($tn)) {
+ $this->rmdir($tn);
+ }
+ clearstatcache();
+ if (file_exists($tn)) {
+ die("OOPS");
+ }
+ return $tn;
+
+ $tn = tempnam(ini_get('session.save_path'),'mtrackworkingdir');
+ unlink($tn);
+ return $tn;
+
+
+ }
+
+
+}