diff --git a/NEWS.mdtext b/NEWS.mdtext index b4850cd..09e1fe9 100644 --- a/NEWS.mdtext +++ b/NEWS.mdtext @@ -52,6 +52,7 @@ - Disable browser autocomplete of password fields in the account settings (issue 616) - Improvements in the automatic linker parser (issue 618) - The `createIssue` API method did not check the API authentication (issue 619) +- Print active git branch heads and tags in bold ## Documentation diff --git a/src/IDF/Scm/Git.php b/src/IDF/Scm/Git.php index 5c8d26e..9339add 100644 --- a/src/IDF/Scm/Git.php +++ b/src/IDF/Scm/Git.php @@ -62,20 +62,20 @@ class IDF_Scm_Git extends IDF_Scm $out = array(); $cmd = Pluf::f('idf_exec_cmd_prefix', '').$cmd; self::exec('IDF_Scm_Git::getChanges', $cmd, $out); - + $return = (object) array( 'additions' => array(), 'deletions' => array(), 'renames' => array(), 'patches' => array(), 'properties' => array(), - ); - + ); + foreach ($out as $line) { $line = trim($line); if ($line != '') { $action = $line[0]; - + if ($action == 'A') { $filename = trim(substr($line, 1)); $return->additions[] = $filename; @@ -88,10 +88,10 @@ class IDF_Scm_Git extends IDF_Scm } else if ($action == 'R') { $matches = split ("\t", $line); $return->renames[$matches[1]] = $matches[2]; - } + } } } - + return $return; } @@ -170,7 +170,7 @@ class IDF_Scm_Git extends IDF_Scm if (isset($this->cache['inBranches'][$commit])) { return $this->cache['inBranches'][$commit]; } - + $cmd = Pluf::f('idf_exec_cmd_prefix', '') .sprintf('GIT_DIR=%s %s branch --contains %s', escapeshellarg($this->repo), @@ -187,9 +187,9 @@ class IDF_Scm_Git extends IDF_Scm foreach ($out as $line) { $res[] = substr($line, 2); } - + $this->cache['inBranches'][$commit] = $res; - return $res; + return $res; } /** @@ -238,35 +238,29 @@ class IDF_Scm_Git extends IDF_Scm **/ public function inTags($commit, $path) { - return $this->_inObject($commit, 'tag'); - } + if (isset($this->cache['inTags'][$commit])) { + return $this->cache['inTags'][$commit]; + } - /** - * Returns in which branches or tags a commit is. - * - * @param string Commit - * @param string Object's type: 'branch' or 'tag'. - * @return array - */ - private function _inObject($commit, $object) - { - $object = strtolower($object); - if ('branch' === $object) { - $objects = $this->getBranches(); - } else if ('tag' === $object) { - $objects = $this->getTags(); - } else { - throw new InvalidArgumentException(sprintf(__('Invalid value for the parameter %1$s: %2$s. Use %3$s.'), - '$object', - $object, - '\'branch\' or \'tag\'')); + $cmd = Pluf::f('idf_exec_cmd_prefix', '') + .sprintf('GIT_DIR=%s %s tag --contains %s', + escapeshellarg($this->repo), + Pluf::f('git_path', 'git'), + escapeshellarg($commit)); + self::exec('IDF_Scm_Git::inTags', $cmd, $out, $return); + if (0 != $return) { + throw new IDF_Scm_Exception(sprintf($this->error_tpl, + $cmd, $return, + implode("\n", $out))); } - unset($object); - $result = array(); - if (array_key_exists($commit, $objects)) { - $result[] = $commit; + + $res = array(); + foreach ($out as $line) { + $res[] = $line; } - return $result; + + $this->cache['inTags'][$commit] = $res; + return $res; } /** @@ -368,8 +362,8 @@ class IDF_Scm_Git extends IDF_Scm $keys = $user->get_idf_key_list(); if (count ($keys) == 0) return self::getAnonymousAccessUrl($project); - } - + } + return sprintf(Pluf::f('git_write_remote_url'), $project->shortname); } @@ -527,7 +521,7 @@ class IDF_Scm_Git extends IDF_Scm $out[0]->diff = ''; } - $out[0]->branch = implode(', ', $this->inBranches($commit, null)); + $out[0]->branch = implode(', ', $this->inBranches($out[0]->commit, null)); return $out[0]; }