Update jQuery from 1.12.4 to 3.7.1
[phorkie.git] / src / phorkie / Repository / Post.php
index 511a83c569c40cd5d1ff1f6e7c7955f9819ba3e2..ce9e52cea8fd9397410026497740e204d87e3a44 100644 (file)
@@ -13,6 +13,12 @@ class Repository_Post
      */
     public $newfileName;
 
+    /**
+     * List of files that have been renamed.
+     *
+     * @var array
+     */
+    public $renameMap = array();
 
 
     public function __construct(Repository $repo = null)
@@ -48,6 +54,9 @@ class Repository_Post
             $bChanged = true;
         }
 
+        $this->renameMap   = array();
+        $this->newfileName = null;
+
         foreach ($postData['files'] as $num => $arFile) {
             $bUpload = false;
             if ($_FILES['files']['error'][$num]['upload'] == 0) {
@@ -58,8 +67,8 @@ class Repository_Post
                 continue;
             }
 
-            $orignalName = Tools::sanitizeFilename($arFile['original_name']);
-            $name        = Tools::sanitizeFilename($arFile['name']);
+            $originalName = Tools::sanitizeFilename($arFile['original_name']);
+            $name         = Tools::sanitizeFilename($arFile['name']);
 
             if ($arFile['type'] == '_auto_') {
                 //FIXME: upload
@@ -79,7 +88,7 @@ class Repository_Post
 
             $bNew = false;
             $bDelete = false;
-            if (!isset($orignalName) || $orignalName == '') {
+            if (!isset($originalName) || $originalName == '') {
                 //new file
                 $bNew = true;
                 if (strpos($name, '.') === false) {
@@ -87,27 +96,31 @@ class Repository_Post
                     $name .= '.' . $arFile['type'];
                 }
                 $this->newfileName = $name;
-            } else if (!$this->repo->hasFile($orignalName)) {
+            } else if (!$this->repo->hasFile($originalName)) {
                 //unknown file
                 //FIXME: Show error message
                 continue;
             } else if (isset($arFile['delete']) && $arFile['delete'] == 1) {
                 $bDelete = true;
-            } else if ($orignalName != $name) {
+            } else if ($originalName != $name) {
                 if (strpos($name, '/') === false) {
                     //ignore names with a slash in it, would be new directory
                     //FIXME: what to do with overwrites?
                     $vc->getCommand('mv')
-                        ->addArgument($orignalName)
+                        ->addArgument($originalName)
                         ->addArgument($name)
                         ->execute();
                     $bCommit = true;
+                    $this->renameMap[$originalName] = $name;
                 } else {
-                    $name = $orignalName;
+                    $name = $originalName;
                 }
             }
 
             $file = $this->repo->getFileByName($name, false);
+            if ($originalName !== '') {
+                $originalFile = $this->repo->getFileByName($originalName, false);
+            }
             if ($bDelete) {
                 $command = $vc->getCommand('rm')
                     ->addArgument($file->getFilename())
@@ -123,8 +136,8 @@ class Repository_Post
                     ->execute();
                 $bCommit = true;
             } else if ($bNew
-                || (isset($arFile['content'])
-                    && $file->getContent() != $arFile['content']
+                || (isset($arFile['content']) && isset($originalFile)
+                    && $originalFile->getContent() != $arFile['content']
                 )
             ) {
                 $dir = dirname($file->getFullPath());
@@ -154,18 +167,28 @@ class Repository_Post
                     'author',
                     $sessionData['name'] . ' <' . $sessionData['email'] . '>'
                 )
+                ->setEnvVar('GIT_AUTHOR_NAME', $sessionData['name'])
+                ->setEnvVar('GIT_AUTHOR_EMAIL', $sessionData['email'])
+                ->setEnvVar('GIT_COMMITTER_NAME', $sessionData['name'])
+                ->setEnvVar('GIT_COMMITTER_EMAIL', $sessionData['email'])
                 ->execute();
             //FIXME: git needs ref BEFORE add
             //quick hack until http://pear.php.net/bugs/bug.php?id=19605 is fixed
-            //also waiting for https://pear.php.net/bugs/bug.php?id=19623
             $vc->getCommand('notes --ref=identity add')
                 ->setOption('force')
                 ->setOption('message', "$notes")
+                ->setEnvVar('GIT_AUTHOR_NAME', $sessionData['name'])
+                ->setEnvVar('GIT_AUTHOR_EMAIL', $sessionData['email'])
+                ->setEnvVar('GIT_COMMITTER_NAME', $sessionData['name'])
+                ->setEnvVar('GIT_COMMITTER_EMAIL', $sessionData['email'])
                 ->execute();
             //update info for dumb git HTTP transport
             //the post-update hook should do that IMO, but does not somehow
             $vc->getCommand('update-server-info')->execute();
 
+            //we changed the hash by committing, so reload it
+            $this->repo->reloadHash();
+
             $bChanged = true;
         }