Toggle navigation
P3X GitList Snapshot
GitHub
Repo
Changelog
To do
Releases
Themes
Change log
Loading change log ...
To do ...
Loading todo ...
browsing:
52201e6172d7c6511c123925cb0c5dc19886f023
Branches
master
Tags
v2024.4.105
v2023.10.119
v2023.10.102
v2022.4.106
v2021.10.211
v2021.10.198
v2021.10.197
v2021.10.195
v2021.10.194
v2021.10.191
v2021.10.189
v2021.10.183
v2021.10.161
v2021.10.152
v2021.10.146
v2021.10.143
v2021.4.102
v2020.10.189
v2020.10.187
v2020.10.185
v2020.10.182
v2020.10.170
v2020.10.138
v2020.10.136
v2020.10.104
v2020.10.102
v2020.4.218
v2020.4.210
v2020.4.188
v2020.4.185
v2020.4.146
v2020.4.144
v2020.4.126
v2020.4.125
v2020.4.123
v2020.4.117
v2020.4.116
v2020.4.114
v2020.4.111
v2020.4.107
v2020.4.105
v2020.4.103
v2019.10.154
v2019.10.146
v2019.10.114
v2019.10.111
v2019.10.109
v2019.4.128
v2019.4.124
v2019.4.121
v2019.4.119
v2019.4.116
v2019.4.113
v2019.4.108
v2019.4.107
v2019.4.106
v2019.4.104
v2019.4.102
v2019.4.22
v2019.4.21
v2019.4.19
v2019.4.16
v2019.2.9-0
v2019.1.23-7
v2019.1.23-0
v2019.1.19-3
v2019.1.1-16
v2019.1.1-15
v2019.1.1-13
v2019.1.1-11
v2019.1.1-6
v2014.4.16
v2014.4.14
v1.1.18-573
p3x-gitlist-2.8.25-822
2019.4.8
2019.1.15-0
2019.1.12-3
2019.1.12-1
2019.1.10-5
2019.1.1-2
2018.12.31-3
2018.12.30-1
2018.12.22-6
2018.12.21-8
2018.12.21-7
2018.12.21-2
2018.12.14-3
2018.12.14-1
2018.12.14-0
2018.12.13-4
2018.12.13-3
2018.12.13-1
2018.12.13-0
2018.11.24-2
2018.11.19-0
2018.11.15-3
2018.11.15-1
2018.10.8-1
2018.9.20-0
2.12.10-1046
2.12.6-1040
2.12.4-1038
2.11.14-1031
2.10.83-1014
2.9.13-892
2.9.8-888
2.9.6-887
2.9.4-886
2.9.2-883
2.9.1-882
2.8.56-862
2.8.52-855
2.8.48-849
2.8.27-829
2.8.23-822
2.8.7-806
2.8.2-803
2.8.0
2.7.78-794
2.7.19-757
2.7.17-754
2.7.12-750
2.7.8-749
2.7.5-743
2.7.4-742
2.6.2-721
2.5.22-696
2.5.19-684
2.5.7-668
2.1.7-643
2.0.38-619
2.0.37-616
2.0.35-613
2.0.33-609
2.0.31-604
2.0.27-600
2.0.26-598
2.0.25-598
2.0.17-593
2.0.15-589
2.0.12-585
2.0.4-579
1.1.14
1.1.13
1.1.12
1.1.11
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.4-rc.3
1.0.4-rc.2
1.0.4-rc.1
1.0.3
1.0.2
1.0.1
1.0.0
0.5.6
0.5.5
0.5.4
0.5.0
0.4.0
0.3
0.2
0.1
Files
Commits
Log
Graph
Stats
gitlist.git
src
GitList
Util
Routing.php
RSS
Git
Fetch origin
Download
ZIP
TAR
Clone
Raw
View
History
Clone
SSH
HTTPS
Blames found: 67
Mode: php
Binary: false
Hang on, we reloading big blames...
ffe27b2a
<?php
132ba426
namespace GitList\Util;
ffe27b2a
use Silex\Application;
35dd1ed0
use GitList\Exception\EmptyRepositoryException;
ffe27b2a
class Routing { protected $app; public function __construct(Application $app) { $this->app = $app; }
132ba426
/* @brief Return $commitish, $path parsed from $commitishPath, based on
421574b5
* what's in $repo. Raise a 404 if $branchpath does not represent a * valid branch and path. * * A helper for parsing routes that use commit-ish names and paths * separated by /, since route regexes are not enough to get that right. */
132ba426
public function parseCommitishPathParam($commitishPath, $repo) {
421574b5
$app = $this->app;
5122e91b
$repository = $app['git']->getRepositoryFromName($app['git.repos'], $repo);
421574b5
$commitish = null; $path = null;
132ba426
$slashPosition = strpos($commitishPath, '/'); if (strlen($commitishPath) >= 40 && ($slashPosition === false || $slashPosition === 40)) {
421574b5
// We may have a commit hash as our commitish.
132ba426
$hash = substr($commitishPath, 0, 40);
421574b5
if ($repository->hasCommit($hash)) { $commitish = $hash; } } if ($commitish === null) { $branches = $repository->getBranches(); $tags = $repository->getTags(); if ($tags !== null && count($tags) > 0) { $branches = array_merge($branches, $tags); }
132ba426
$matchedBranch = null; $matchedBranchLength = 0;
421574b5
foreach ($branches as $branch) {
132ba426
if (strpos($commitishPath, $branch) === 0 && strlen($branch) > $matchedBranchLength) { $matchedBranch = $branch; $matchedBranchLength = strlen($matchedBranch);
421574b5
} }
35dd1ed0
if ($matchedBranch === null) { throw new EmptyRepositoryException('This repository is currently empty. There are no commits.'); }
421574b5
35dd1ed0
$commitish = $matchedBranch;
421574b5
}
132ba426
$commitishLength = strlen($commitish); $path = substr($commitishPath, $commitishLength);
421574b5
if (strpos($path, '/') === 0) { $path = substr($path, 1); } return array($commitish, $path); }
132ba426
public function getBranchRegex() { static $branchRegex = null;
421574b5
132ba426
if ($branchRegex === null) {
4eaebed4
$branchRegex = '(?!/|.*([/.]\.|//|@\{|\\\\))[^\040\177 ~^:?*\[]+(?<!\.lock|[/.])';
421574b5
}
132ba426
return $branchRegex;
421574b5
}
132ba426
public function getCommitishPathRegex() { static $commitishPathRegex = null;
421574b5
132ba426
if ($commitishPathRegex === null) { $commitishPathRegex = '.+';
421574b5
}
132ba426
return $commitishPathRegex;
421574b5
}
ffe27b2a
public function getRepositoryRegex() { static $regex = null; if ($regex === null) { $app = $this->app;
6034d143
$self = $this;
11e662c7
$quotedPaths = array_map(
6034d143
function ($repo) use ($app, $self) {
5122e91b
$repoName = $repo['name'];
6034d143
//Windows
dcd701fa
if ($self->isWindows()){
6034d143
$repoName = str_replace('\\', '\\\\',$repoName); } return $repoName;
ffe27b2a
}, $this->app['git']->getRepositories($this->app['git.repos']) );
132ba426
usort( $quotedPaths, function ($a, $b) { return strlen($b) - strlen($a); } );
11e662c7
$regex = implode('|', $quotedPaths);
ffe27b2a
} return $regex; }
a22760d5
dcd701fa
public function isWindows()
a22760d5
{
5122e91b
switch (PHP_OS) { case 'WIN32': case 'WINNT': case 'Windows': return true; default: return false; }
6034d143
}
ffe27b2a
/** * Strips the base path from a full repository path *
132ba426
* @param string $repoPath Full path to the repository
ffe27b2a
* @return string Relative path to the repository from git.repositories */
11e662c7
public function getRelativePath($repoPath)
ffe27b2a
{
11e662c7
if (strpos($repoPath, $this->app['git.repos']) === 0) { $relativePath = substr($repoPath, strlen($this->app['git.repos']));
132ba426
9d341b59
return ltrim(strtr($relativePath, '\\', '/'), '/');
ffe27b2a
} else { throw new \InvalidArgumentException(
11e662c7
sprintf("Path '%s' does not match configured repository directory", $repoPath)
ffe27b2a
); } } }
a22760d5