<div class="row-fluid">
<div class="span6">
<label for="filename_1">Filename</label>
- <input type="text" name="files[{{fileid}}][name]" id="filename_{{fileid}}" value="{{ file.getFilename }}"/>
+ <input type="hidden" name="files[{{fileid}}][original_name]" value="{{file.getFilename}}"/>
+ <input type="text" name="files[{{fileid}}][name]" id="filename_{{fileid}}" value="{{file.getFilename}}"/>
</div>
<div class="span6" style="text-align: right">
<label for="type_{{fileid}}">Type</label>
</select>
</div>
</div>
- <textarea name="files[{{fileid}}][content]" id="content_1" cols="80" rows="10" class="content">{{ file.getContent }}</textarea>
+ <textarea name="files[{{fileid}}][content]" id="content_{{fileid}}" cols="80" rows="10" class="content">{{file.getContent}}</textarea>
</div>
{% block title %}Edit paste{% endblock %}
{% block content %}
-<form method="post" action="/">
+<form method="post" action="{{repo.getLink('edit')}}">
<div class="control-group well pastedata">
<label for="description">Description</label>
<input type="text" name="description" id="description" value="{{repo.getDescription}}"/>
return basename($this->path);
}
+ /**
+ * Return the full path to the file
+ *
+ * @return string
+ */
+ public function getPath()
+ {
+ return $this->path;
+ }
+
/**
* Get file extension without dot
*
if ($base != $name) {
throw new Exception('No directories supported for now');
}
+ if ($name == '') {
+ throw new Exception_Input('Empty file name given');
+ }
$path = $this->repoDir . '/' . $base;
if (!is_readable($path)) {
throw new Exception_Input('File does not exist');
return new File($path, $this);
}
+ public function hasFile($name)
+ {
+ try {
+ $this->getFileByName($name);
+ } catch (Exception $e) {
+ return false;
+ }
+ return true;
+ }
+
public function getDescription()
{
if (!is_readable($this->repoDir . '/.git/description')) {
return file_get_contents($this->repoDir . '/.git/description');
}
+ public function setDescription($description)
+ {
+ file_put_contents($this->repoDir . '/.git/description', $description);
+ }
+
/**
* Get a link to the repository
*
$repo = new Repository();
$repo->loadFromRequest();
+if (isset($_POST['files'])) {
+ $vc = $repo->getVc();
+ $repo->setDescription($_POST['description']);
+
+ $bChanged = false;
+ foreach ($_POST['files'] as $num => $arFile) {
+ if (!isset($arFile['original_name'])
+ || !$repo->hasFile($arFile['original_name'])
+ ) {
+ //FIXME: Show error message
+ continue;
+ }
+ //FIXME: fix file names from .. and ./
+ if ($arFile['original_name'] != $arFile['name']) {
+ //FIXME: what to do with overwrites?
+ $vc->getCommand('mv')
+ ->addArgument($arFile['original_name'])
+ ->addArgument($arFile['name'])
+ ->execute();
+ $bChanged = true;
+ }
+ $file = $repo->getFileByName($arFile['name']);
+ if ($file->getContent() != $arFile['content']) {
+ file_put_contents($file->getPath(), $arFile['content']);
+ $command = $vc->getCommand('add')
+ ->addArgument($file->getFilename())
+ ->execute();
+ $bChanged = true;
+ }
+ }
+
+ if ($bChanged) {
+ $vc->getCommand('commit')
+ ->setOption('message', '')
+ ->setOption('allow-empty-message')
+ ->setOption('author', 'Anonymous <anonymous@phorkie>')
+ ->execute();
+ }
+
+ redirect($repo->getLink('display'));
+}
+
render(
'edit',
array(
foreach (glob($repo->repoDir . '/.git/hooks/*') as $hookfile) {
unlink($hookfile);
}
- file_put_contents($repo->repoDir . '.git/description', $_POST['description']);
+ $repo->setDescription($_POST['description']);
foreach ($_POST['files'] as $num => $arFile) {
if ($arFile['name'] != '') {
+ //FIXME: fix file name from ..
$fname = $arFile['name'];
} else {
$fname = 'phork' . $num . '.' . $arFile['type'];