| ... | ... |
@@ -180,36 +180,32 @@ sub startup {
|
| 180 | 180 |
$r->get('/')->name('project');
|
| 181 | 181 |
|
| 182 | 182 |
# Commit |
| 183 |
- $r->get('/commit/#diff')->name('commit');
|
|
| 183 |
+ $r->get('/commit/*diff')->name('commit');
|
|
| 184 | 184 |
|
| 185 | 185 |
# Commits |
| 186 |
- $r->get('/commits/#rev', {id => 'HEAD'})->name('commits');
|
|
| 187 |
- $r->get('/commits/#rev/(*blob)')->name('commits');
|
|
| 186 |
+ $r->get('/commits/*rev_file', {file => undef})->name('commits');
|
|
| 188 | 187 |
|
| 189 | 188 |
# Branches |
| 190 |
- $r->any('/branches/:base_branch', {base_branch => undef})->name('branches');
|
|
| 189 |
+ $r->any('/branches/*base_branch', {base_branch => undef})->name('branches');
|
|
| 191 | 190 |
|
| 192 | 191 |
# Tags |
| 193 | 192 |
$r->get('/tags')->name('tags');
|
| 194 | 193 |
|
| 195 | 194 |
# Tree |
| 196 |
- $r->get('/tree/:rev/(*dir)', {dir => undef})->name('tree');
|
|
| 195 |
+ $r->get('/tree/*rev_dir', {dir => undef})->name('tree');
|
|
| 197 | 196 |
|
| 198 | 197 |
# Blob |
| 199 |
- $r->get('/blob/:rev/(*file)', {file => undef})->name('blob');
|
|
| 200 |
- |
|
| 201 |
- # Blob diff |
|
| 202 |
- $r->get('/blobdiff/(#diff)/(*file)')->name('blobdiff');
|
|
| 198 |
+ $r->get('/blob/*rev_file', {file => undef})->name('blob');
|
|
| 203 | 199 |
|
| 204 | 200 |
# Raw |
| 205 |
- $r->get('/raw/:rev/(*file)', {file => undef})->name('raw');
|
|
| 201 |
+ $r->get('/raw/*rev_file', {file => undef})->name('raw');
|
|
| 206 | 202 |
|
| 207 | 203 |
# Archive |
| 208 |
- $r->get('/archive/(:rev).(tar.gz')->name('archive')->to(archive_type => 'tar');
|
|
| 209 |
- $r->get('/archive/(:rev).zip')->name('archive')->to(archive_type => 'zip');
|
|
| 204 |
+ $r->get('/archive/(*rev).tar.gz')->name('archive')->to(archive_type => 'tar');
|
|
| 205 |
+ $r->get('/archive/(*rev).zip')->name('archive')->to(archive_type => 'zip');
|
|
| 210 | 206 |
|
| 211 | 207 |
# Compare |
| 212 |
- $r->get('/compare/(#rev1)...(#rev2)')->name('compare');
|
|
| 208 |
+ $r->get('/compare/(*rev1)...(*rev2)')->name('compare');
|
|
| 213 | 209 |
|
| 214 | 210 |
# Settings |
| 215 | 211 |
$r->any('/settings')->name('project-settings');
|
| ... | ... |
@@ -35,6 +35,54 @@ sub _dec {
|
| 35 | 35 |
return $@ ? $str : $new_str; |
| 36 | 36 |
} |
| 37 | 37 |
|
| 38 |
+sub parse_rev_path {
|
|
| 39 |
+ my ($self, $user, $project, $rev_path) = @_; |
|
| 40 |
+ |
|
| 41 |
+ # References |
|
| 42 |
+ my @cmd = $self->cmd( |
|
| 43 |
+ $user, |
|
| 44 |
+ $project, |
|
| 45 |
+ 'show-ref', |
|
| 46 |
+ '--dereference' |
|
| 47 |
+ ); |
|
| 48 |
+ open my $fh, '-|', @cmd |
|
| 49 |
+ or return; |
|
| 50 |
+ my $refs = []; |
|
| 51 |
+ while (my $line = $self->_dec(scalar <$fh>)) {
|
|
| 52 |
+ chomp $line; |
|
| 53 |
+ if ($line =~ m!^[0-9a-fA-F]{40}\s(refs/((?:heads|tags)/(.*)))$!) {
|
|
| 54 |
+ push @$refs, $1, $2, $3; |
|
| 55 |
+ } |
|
| 56 |
+ } |
|
| 57 |
+ close $fh or return; |
|
| 58 |
+ |
|
| 59 |
+ @$refs = sort {
|
|
| 60 |
+ my @a_match = $a =~ /(\/)/g; |
|
| 61 |
+ my @b_match = $b =~ /(\/)/g; |
|
| 62 |
+ scalar @b_match <=> scalar @a_match; |
|
| 63 |
+ } @$refs; |
|
| 64 |
+ |
|
| 65 |
+ for my $ref (@$refs) {
|
|
| 66 |
+ $rev_path =~ m#/$#; |
|
| 67 |
+ if ($rev_path =~ m#^(\Q$ref\E)/(.+)#) {
|
|
| 68 |
+ my $rev = $1; |
|
| 69 |
+ my $path = $2; |
|
| 70 |
+ return ($rev, $path); |
|
| 71 |
+ } |
|
| 72 |
+ elsif ($rev_path eq $ref) {
|
|
| 73 |
+ return ($rev_path, ''); |
|
| 74 |
+ } |
|
| 75 |
+ } |
|
| 76 |
+ |
|
| 77 |
+ if ($rev_path) {
|
|
| 78 |
+ my ($rev, $path) = split /\//, $rev_path, 2; |
|
| 79 |
+ $path = '' unless defined $path; |
|
| 80 |
+ return ($rev, $path); |
|
| 81 |
+ } |
|
| 82 |
+ |
|
| 83 |
+ return; |
|
| 84 |
+} |
|
| 85 |
+ |
|
| 38 | 86 |
sub authors {
|
| 39 | 87 |
my ($self, $user, $project, $rev, $file) = @_; |
| 40 | 88 |
|
| ... | ... |
@@ -692,9 +740,10 @@ sub references {
|
| 692 | 740 |
|
| 693 | 741 |
# Parse references |
| 694 | 742 |
my %refs; |
| 743 |
+ my $type_re = $type ? $type : '(?:heads|tags)'; |
|
| 695 | 744 |
while (my $line = $self->_dec(scalar <$fh>)) {
|
| 696 | 745 |
chomp $line; |
| 697 |
- if ($line =~ m!^([0-9a-fA-F]{40})\srefs/$type/(.*)$!) {
|
|
| 746 |
+ if ($line =~ m!^([0-9a-fA-F]{40})\srefs/$type_re/(.*)$!) {
|
|
| 698 | 747 |
if (defined $refs{$1}) { push @{$refs{$1}}, $2 }
|
| 699 | 748 |
else { $refs{$1} = [$2] }
|
| 700 | 749 |
} |
| ... | ... |
@@ -1196,7 +1245,7 @@ sub get_commits {
|
| 1196 | 1245 |
('--skip=' . $skip),
|
| 1197 | 1246 |
$cid, |
| 1198 | 1247 |
'--', |
| 1199 |
- (defined $file ? ($file) : ()) |
|
| 1248 |
+ (defined $file && length $file ? ($file) : ()) |
|
| 1200 | 1249 |
); |
| 1201 | 1250 |
open my $fh, '-|', @cmd |
| 1202 | 1251 |
or croak 'Open git-rev-list failed'; |
| ... | ... |
@@ -1,15 +1,15 @@ |
| 1 | 1 |
<% |
| 2 | 2 |
# API |
| 3 | 3 |
my $api = gitprep_api; |
| 4 |
+ |
|
| 5 |
+ # Git |
|
| 6 |
+ my $git = $self->app->git; |
|
| 4 | 7 |
|
| 5 | 8 |
# Parameters |
| 6 | 9 |
my $user = param('user');
|
| 7 | 10 |
my $project = param('project');
|
| 8 |
- my $rev = param('rev');
|
|
| 9 |
- my $file = param('file');
|
|
| 10 |
- |
|
| 11 |
- # Git |
|
| 12 |
- my $git = $self->app->git; |
|
| 11 |
+ my $rev_file = param('rev_file');
|
|
| 12 |
+ my ($rev, $file) = $git->parse_rev_path($user, $project, $rev_file); |
|
| 13 | 13 |
|
| 14 | 14 |
# Commit |
| 15 | 15 |
my $commit = $git->last_change_commit($user, $project, $rev, $file); |
| ... | ... |
@@ -31,7 +31,7 @@ |
| 31 | 31 |
my $mimetype = $git->blob_mimetype($user, $project, $rev, $file); |
| 32 | 32 |
|
| 33 | 33 |
# Variables for included template |
| 34 |
- stash(id => $rev, project => $project); |
|
| 34 |
+ stash(id => $rev, project => $project, rev => $rev); |
|
| 35 | 35 |
%> |
| 36 | 36 |
|
| 37 | 37 |
% layout 'common' , stylesheets => ['/js/google-code-prettify/prettify.css']; |
| ... | ... |
@@ -56,6 +56,7 @@ |
| 56 | 56 |
stash( |
| 57 | 57 |
from_id => $from_id, |
| 58 | 58 |
id => $id, |
| 59 |
+ rev => $id, |
|
| 59 | 60 |
commit => $commit |
| 60 | 61 |
); |
| 61 | 62 |
%> |
| ... | ... |
@@ -2,16 +2,16 @@ |
| 2 | 2 |
# API |
| 3 | 3 |
my $api = gitprep_api; |
| 4 | 4 |
|
| 5 |
+ # Git |
|
| 6 |
+ my $git = $self->app->git; |
|
| 7 |
+ |
|
| 5 | 8 |
# Parameters |
| 6 | 9 |
my $user = param('user');
|
| 7 | 10 |
my $project = param('project');
|
| 8 |
- my $rev = param('rev');
|
|
| 9 |
- my $blob = param('blob');
|
|
| 11 |
+ my $rev_file = param('rev_file');
|
|
| 12 |
+ my ($rev, $file) = $git->parse_rev_path($user, $project, $rev_file); |
|
| 10 | 13 |
my $page = param('page') || 0;
|
| 11 | 14 |
|
| 12 |
- # Git |
|
| 13 |
- my $git = $self->app->git; |
|
| 14 |
- |
|
| 15 | 15 |
# Commit |
| 16 | 16 |
my $commit = $git->get_commit($user, $project, $rev); |
| 17 | 17 |
|
| ... | ... |
@@ -23,7 +23,7 @@ |
| 23 | 23 |
$commit->{id},
|
| 24 | 24 |
$page_count, |
| 25 | 25 |
$page_count * $page, |
| 26 |
- $blob |
|
| 26 |
+ $file |
|
| 27 | 27 |
); |
| 28 | 28 |
my $commits_count = @$commits; |
| 29 | 29 |
my $commits_date = {};
|
| ... | ... |
@@ -34,7 +34,7 @@ |
| 34 | 34 |
} |
| 35 | 35 |
|
| 36 | 36 |
# Global variable |
| 37 |
- stash(user => $user, project => $project); |
|
| 37 |
+ stash(user => $user, project => $project, rev => $rev); |
|
| 38 | 38 |
%> |
| 39 | 39 |
|
| 40 | 40 |
% layout 'common'; |
| ... | ... |
@@ -46,8 +46,8 @@ |
| 46 | 46 |
%= include '/include/code_menu', display => 'commits'; |
| 47 | 47 |
|
| 48 | 48 |
<div style="margin-top:20px;margin-bottom:15px"> |
| 49 |
- % if (defined $blob) {
|
|
| 50 |
- %= include '/include/page_path', type => 'blob', Path => $blob, operation => 'commits', prefix => 'History for'; |
|
| 49 |
+ % if (defined $file) {
|
|
| 50 |
+ %= include '/include/page_path', type => 'blob', Path => $file, operation => 'commits', prefix => 'History for'; |
|
| 51 | 51 |
% } else {
|
| 52 | 52 |
<div style="font-size:18px"> |
| 53 | 53 |
<a class="ubar" href="<%= url_for("/$user/$project") %>">
|
| ... | ... |
@@ -113,7 +113,7 @@ |
| 113 | 113 |
<h2>Compare View</h2> |
| 114 | 114 |
<div class="well" style="padding:9px 10px 9px 10px;margin-bottom:5px;position:relative"> |
| 115 | 115 |
<div class="row"> |
| 116 |
- <div class="span3"> |
|
| 116 |
+ <div class="span8"> |
|
| 117 | 117 |
<button id="base-branch-btn" class="btn" style="padding:2px 10px"> |
| 118 | 118 |
<%= $rev1 %> |
| 119 | 119 |
</button> |
| ... | ... |
@@ -1,6 +1,7 @@ |
| 1 | 1 |
<% |
| 2 | 2 |
my $display = stash('display') || '';
|
| 3 | 3 |
my $rev = stash('rev');
|
| 4 |
+ $rev = '' unless defined $rev; |
|
| 4 | 5 |
my $branches = stash('branches');
|
| 5 | 6 |
my $branches_count = app->git->branches_count($user, $project); |
| 6 | 7 |
my $default_branch_name = app->manager->default_branch($user, $project); |
| ... | ... |
@@ -98,7 +99,7 @@ |
| 98 | 99 |
<% |
| 99 | 100 |
my $title; |
| 100 | 101 |
my $rev_short; |
| 101 |
- if (length $rev == 40) {
|
|
| 102 |
+ if (defined $rev && length $rev == 40) {
|
|
| 102 | 103 |
$title = 'tree'; |
| 103 | 104 |
$rev_short = substr($rev, 0, 10); |
| 104 | 105 |
} |
| ... | ... |
@@ -1,12 +1,12 @@ |
| 1 | 1 |
<% |
| 2 |
+ # Git |
|
| 3 |
+ my $git = app->git; |
|
| 4 |
+ |
|
| 2 | 5 |
# Parameters |
| 3 | 6 |
my $user = param('user');
|
| 4 | 7 |
my $project = param('project');
|
| 5 |
- my $rev = param('rev');
|
|
| 6 |
- my $file = param('file');
|
|
| 7 |
- |
|
| 8 |
- # Git |
|
| 9 |
- my $git = app->git; |
|
| 8 |
+ my $rev_file = param('rev_file');
|
|
| 9 |
+ my ($rev, $file) = $git->parse_rev_path($user, $project, $rev_file); |
|
| 10 | 10 |
|
| 11 | 11 |
# Blob raw |
| 12 | 12 |
my $blob_raw = $git->blob_raw($user, $project, $rev, $file); |
| ... | ... |
@@ -1,15 +1,15 @@ |
| 1 | 1 |
<% |
| 2 | 2 |
# API |
| 3 | 3 |
my $api = gitprep_api; |
| 4 |
+ |
|
| 5 |
+ # Git |
|
| 6 |
+ my $git = app->git; |
|
| 4 | 7 |
|
| 5 | 8 |
# Parameters |
| 6 | 9 |
my $user = param('user');
|
| 7 | 10 |
my $project = param('project');
|
| 8 |
- my $rev = param('rev');
|
|
| 9 |
- my $dir = param('dir');
|
|
| 10 |
- |
|
| 11 |
- # Git |
|
| 12 |
- my $git = app->git; |
|
| 11 |
+ my $rev_dir = param('rev_dir');
|
|
| 12 |
+ my ($rev, $dir) = $git->parse_rev_path($user, $project, $rev_dir); |
|
| 13 | 13 |
|
| 14 | 14 |
# Tree id |
| 15 | 15 |
my $commit = $git->get_commit($user, $project, $rev); |
| ... | ... |
@@ -24,10 +24,10 @@ |
| 24 | 24 |
|
| 25 | 25 |
# Variable for included templates |
| 26 | 26 |
stash( |
| 27 |
- rev => $rev, |
|
| 28 | 27 |
commit => $commit, |
| 29 | 28 |
trees => $trees, |
| 30 |
- dir => $dir, |
|
| 29 |
+ rev => $rev, |
|
| 30 |
+ dir => $dir |
|
| 31 | 31 |
); |
| 32 | 32 |
%> |
| 33 | 33 |
|
| ... | ... |
@@ -69,43 +69,81 @@ note 'Project page'; |
| 69 | 69 |
$t->content_like(qr#/$user/$project/blob/master/README#); |
| 70 | 70 |
} |
| 71 | 71 |
|
| 72 |
-note 'Commit page - first commit'; |
|
| 72 |
+note 'Commit page'; |
|
| 73 | 73 |
{
|
| 74 |
- # Page access |
|
| 75 |
- $t->get_ok("/$user/$project/commit/4b0e81c462088b16fefbe545e00b993fd7e6f884");
|
|
| 76 |
- |
|
| 77 |
- # Commit message |
|
| 78 |
- $t->content_like(qr/first commit/); |
|
| 79 |
- |
|
| 80 |
- # Commit datetime |
|
| 81 |
- $t->content_like(qr/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/);
|
|
| 82 |
- |
|
| 83 |
- # Parent not eixsts |
|
| 84 |
- $t->content_like(qr/0 <span .*?>parent/); |
|
| 85 |
- |
|
| 86 |
- # Commit id |
|
| 87 |
- $t->content_like(qr/4b0e81c462088b16fefbe545e00b993fd7e6f884/); |
|
| 88 |
- |
|
| 89 |
- # Author |
|
| 90 |
- $t->content_like(qr/Yuki Kimoto/); |
|
| 91 |
- |
|
| 92 |
- # File change count |
|
| 93 |
- $t->content_like(qr/1 changed files/); |
|
| 94 |
- |
|
| 95 |
- # Added README |
|
| 96 |
- $t->content_like(qr/class="file-add".*?README/s); |
|
| 97 |
- |
|
| 98 |
- # Empty file is added |
|
| 99 |
- $t->content_like(qr/No changes/); |
|
| 74 |
+ {
|
|
| 75 |
+ # Page access |
|
| 76 |
+ $t->get_ok("/$user/$project/commit/4b0e81c462088b16fefbe545e00b993fd7e6f884");
|
|
| 77 |
+ |
|
| 78 |
+ # Commit message |
|
| 79 |
+ $t->content_like(qr/first commit/); |
|
| 80 |
+ |
|
| 81 |
+ # Commit datetime |
|
| 82 |
+ $t->content_like(qr/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/);
|
|
| 83 |
+ |
|
| 84 |
+ # Parent not eixsts |
|
| 85 |
+ $t->content_like(qr/0 <span .*?>parent/); |
|
| 86 |
+ |
|
| 87 |
+ # Commit id |
|
| 88 |
+ $t->content_like(qr/4b0e81c462088b16fefbe545e00b993fd7e6f884/); |
|
| 89 |
+ |
|
| 90 |
+ # Author |
|
| 91 |
+ $t->content_like(qr/Yuki Kimoto/); |
|
| 92 |
+ |
|
| 93 |
+ # File change count |
|
| 94 |
+ $t->content_like(qr/1 changed files/); |
|
| 95 |
+ |
|
| 96 |
+ # Added README |
|
| 97 |
+ $t->content_like(qr/class="file-add".*?README/s); |
|
| 98 |
+ |
|
| 99 |
+ # Empty file is added |
|
| 100 |
+ $t->content_like(qr/No changes/); |
|
| 101 |
+ } |
|
| 102 |
+ {
|
|
| 103 |
+ # Page access (branch name) |
|
| 104 |
+ $t->get_ok("/$user/$project/commit/b1");
|
|
| 105 |
+ $t->content_like(qr/\+bbb/); |
|
| 106 |
+ } |
|
| 107 |
+ {
|
|
| 108 |
+ # Page access (branch name long) |
|
| 109 |
+ $t->get_ok("/$user/$project/commit/refs/heads/b1");
|
|
| 110 |
+ $t->content_like(qr/\+bbb/); |
|
| 111 |
+ $t->content_like(qr#refs/heads/b1#); |
|
| 112 |
+ } |
|
| 100 | 113 |
} |
| 101 | 114 |
|
| 102 | 115 |
note 'Commits page'; |
| 103 | 116 |
{
|
| 104 |
- # Page access |
|
| 105 |
- $t->get_ok("/$user/$project/commits/master");
|
|
| 106 |
- |
|
| 107 |
- # Commit date time |
|
| 108 |
- $t->content_like(qr/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/);
|
|
| 117 |
+ {
|
|
| 118 |
+ # Page access |
|
| 119 |
+ $t->get_ok("/$user/$project/commits/master");
|
|
| 120 |
+ |
|
| 121 |
+ # Commit date time |
|
| 122 |
+ $t->content_like(qr/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/);
|
|
| 123 |
+ } |
|
| 124 |
+ {
|
|
| 125 |
+ # Page access(branch name long) |
|
| 126 |
+ $t->get_ok("/$user/$project/commits/refs/heads/master");
|
|
| 127 |
+ $t->content_like(qr#refs/heads/master#); |
|
| 128 |
+ } |
|
| 129 |
+} |
|
| 130 |
+ |
|
| 131 |
+note 'History page'; |
|
| 132 |
+{
|
|
| 133 |
+ {
|
|
| 134 |
+ # Page access |
|
| 135 |
+ $t->get_ok("/$user/$project/commits/b1/README");
|
|
| 136 |
+ |
|
| 137 |
+ # Content |
|
| 138 |
+ $t->content_like(qr/first commit/); |
|
| 139 |
+ } |
|
| 140 |
+ {
|
|
| 141 |
+ # Page access (branch name long) |
|
| 142 |
+ $t->get_ok("/$user/$project/commits/refs/heads/b1/README");
|
|
| 143 |
+ |
|
| 144 |
+ # Content |
|
| 145 |
+ $t->content_like(qr/first commit/); |
|
| 146 |
+ } |
|
| 109 | 147 |
} |
| 110 | 148 |
|
| 111 | 149 |
note 'Tags page'; |
| ... | ... |
@@ -131,43 +169,113 @@ note 'Tags page'; |
| 131 | 169 |
|
| 132 | 170 |
note 'Tree page'; |
| 133 | 171 |
{
|
| 134 |
- # Page access |
|
| 135 |
- $t->get_ok("/$user/$project/tree/e891266d8aeab864c8eb36b7115416710b2cdc2e");
|
|
| 136 |
- |
|
| 137 |
- # Commit datetime |
|
| 138 |
- $t->content_like(qr/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/);
|
|
| 139 |
- |
|
| 140 |
- # README |
|
| 141 |
- $t->content_like(qr/README.*bbb/s); |
|
| 142 |
- |
|
| 143 |
- # tree directory link |
|
| 144 |
- $t->content_like(qr#/$user/$project/tree/e891266d8aeab864c8eb36b7115416710b2cdc2e/dir#); |
|
| 172 |
+ {
|
|
| 173 |
+ # Page access (hash) |
|
| 174 |
+ $t->get_ok("/$user/$project/tree/e891266d8aeab864c8eb36b7115416710b2cdc2e");
|
|
| 175 |
+ |
|
| 176 |
+ # Commit datetime |
|
| 177 |
+ $t->content_like(qr/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/);
|
|
| 178 |
+ |
|
| 179 |
+ # README |
|
| 180 |
+ $t->content_like(qr/README.*bbb/s); |
|
| 181 |
+ |
|
| 182 |
+ # tree directory link |
|
| 183 |
+ $t->content_like(qr#/$user/$project/tree/e891266d8aeab864c8eb36b7115416710b2cdc2e/dir#); |
|
| 145 | 184 |
|
| 146 |
- # tree file link |
|
| 147 |
- $t->content_like(qr#/$user/$project/blob/e891266d8aeab864c8eb36b7115416710b2cdc2e/README#); |
|
| 185 |
+ # tree file link |
|
| 186 |
+ $t->content_like(qr#/$user/$project/blob/e891266d8aeab864c8eb36b7115416710b2cdc2e/README#); |
|
| 187 |
+ } |
|
| 188 |
+ {
|
|
| 189 |
+ # Page access (branch name) |
|
| 190 |
+ $t->get_ok("/$user/$project/tree/b21/dir");
|
|
| 191 |
+ |
|
| 192 |
+ # File |
|
| 193 |
+ $t->content_like(qr/b\.txt/s); |
|
| 194 |
+ } |
|
| 195 |
+ {
|
|
| 196 |
+ # Page access (branch name middle) |
|
| 197 |
+ $t->get_ok("/$user/$project/tree/heads/b21/dir");
|
|
| 198 |
+ |
|
| 199 |
+ # File |
|
| 200 |
+ $t->content_like(qr/b\.txt/s); |
|
| 201 |
+ } |
|
| 202 |
+ {
|
|
| 203 |
+ # Page access (branch name long) |
|
| 204 |
+ $t->get_ok("/$user/$project/tree/refs/heads/b21/dir");
|
|
| 205 |
+ $t->content_like(qr#refs/heads/b21#); |
|
| 206 |
+ |
|
| 207 |
+ # File |
|
| 208 |
+ $t->content_like(qr/b\.txt/s); |
|
| 209 |
+ } |
|
| 148 | 210 |
} |
| 149 | 211 |
|
| 150 | 212 |
note 'Blob page'; |
| 151 | 213 |
{
|
| 152 |
- # Page access |
|
| 153 |
- $t->get_ok("/$user/$project/blob/b9f0f107672b910a44d22d4623ce7445d40565aa/a_renamed.txt");
|
|
| 154 |
- |
|
| 155 |
- # Commit datetime |
|
| 156 |
- $t->content_like(qr/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/);
|
|
| 157 |
- |
|
| 158 |
- # Content |
|
| 159 |
- $t->content_like(qr/あああ/); |
|
| 160 |
-} |
|
| 214 |
+ {
|
|
| 215 |
+ # Page access (hash) |
|
| 216 |
+ $t->get_ok("/$user/$project/blob/b9f0f107672b910a44d22d4623ce7445d40565aa/a_renamed.txt");
|
|
| 217 |
+ |
|
| 218 |
+ # Commit datetime |
|
| 219 |
+ $t->content_like(qr/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/);
|
|
| 220 |
+ |
|
| 221 |
+ # Content |
|
| 222 |
+ $t->content_like(qr/あああ/); |
|
| 223 |
+ } |
|
| 224 |
+ {
|
|
| 225 |
+ # Page access (branch name) |
|
| 226 |
+ $t->get_ok("/$user/$project/blob/b1/README");
|
|
| 227 |
+ |
|
| 228 |
+ # Content |
|
| 229 |
+ $t->content_like(qr/bbb/); |
|
| 230 |
+ } |
|
| 231 |
+ {
|
|
| 232 |
+ # Page access (branch name middle) |
|
| 233 |
+ $t->get_ok("/$user/$project/blob/heads/b1/README");
|
|
| 234 |
+ |
|
| 235 |
+ # Content |
|
| 236 |
+ $t->content_like(qr/bbb/); |
|
| 237 |
+ } |
|
| 238 |
+ {
|
|
| 239 |
+ # Page access (branch name long) |
|
| 240 |
+ $t->get_ok("/$user/$project/blob/refs/heads/b1/README");
|
|
| 241 |
+ $t->content_like(qr#refs/heads/b1#); |
|
| 242 |
+ |
|
| 243 |
+ # Content |
|
| 244 |
+ $t->content_like(qr/bbb/); |
|
| 245 |
+ }} |
|
| 161 | 246 |
|
| 162 | 247 |
note 'raw page'; |
| 163 | 248 |
{
|
| 164 |
- # Page access |
|
| 165 |
- $t->get_ok("/$user/$project/raw/b9f0f107672b910a44d22d4623ce7445d40565aa/a_renamed.txt");
|
|
| 166 |
- |
|
| 167 |
- # Content |
|
| 168 |
- my $content_binary = $t->tx->res->body; |
|
| 169 |
- my $content = decode('UTF-8', $content_binary);
|
|
| 170 |
- like($content, qr/あああ/); |
|
| 249 |
+ {
|
|
| 250 |
+ # Page access (hash) |
|
| 251 |
+ $t->get_ok("/$user/$project/raw/b9f0f107672b910a44d22d4623ce7445d40565aa/a_renamed.txt");
|
|
| 252 |
+ |
|
| 253 |
+ # Content |
|
| 254 |
+ my $content_binary = $t->tx->res->body; |
|
| 255 |
+ my $content = decode('UTF-8', $content_binary);
|
|
| 256 |
+ like($content, qr/あああ/); |
|
| 257 |
+ } |
|
| 258 |
+ {
|
|
| 259 |
+ # Page access (branch name) |
|
| 260 |
+ $t->get_ok("/$user/$project/raw/b21/dir/b.txt");
|
|
| 261 |
+ |
|
| 262 |
+ my $content = $t->tx->res->body; |
|
| 263 |
+ like($content, qr/aaaa/); |
|
| 264 |
+ } |
|
| 265 |
+ {
|
|
| 266 |
+ # Page access (branch name middle) |
|
| 267 |
+ $t->get_ok("/$user/$project/raw/heads/b21/dir/b.txt");
|
|
| 268 |
+ |
|
| 269 |
+ my $content = $t->tx->res->body; |
|
| 270 |
+ like($content, qr/aaaa/); |
|
| 271 |
+ } |
|
| 272 |
+ {
|
|
| 273 |
+ # Page access (branch name long) |
|
| 274 |
+ $t->get_ok("/$user/$project/raw/refs/heads/b21/dir/b.txt");
|
|
| 275 |
+ |
|
| 276 |
+ my $content = $t->tx->res->body; |
|
| 277 |
+ like($content, qr/aaaa/); |
|
| 278 |
+ } |
|
| 171 | 279 |
} |
| 172 | 280 |
|
| 173 | 281 |
note 'Aarchive'; |
| ... | ... |
@@ -180,3 +288,15 @@ note 'Aarchive'; |
| 180 | 288 |
$t->get_ok("/$user/$project/archive/t1.tar.gz");
|
| 181 | 289 |
$t->content_type_is('application/x-tar');
|
| 182 | 290 |
} |
| 291 |
+ |
|
| 292 |
+note 'Compare page'; |
|
| 293 |
+{
|
|
| 294 |
+ # Page access (branch name) |
|
| 295 |
+ $t->get_ok("/$user/$project/compare/b1...master");
|
|
| 296 |
+ $t->content_like(qr#renamed dir/a\.txt to dir/b\.txt and added text#); |
|
| 297 |
+ |
|
| 298 |
+ # Page access (branch name long) |
|
| 299 |
+ $t->get_ok("/$user/$project/compare/refs/heads/b1...refs/heads/master");
|
|
| 300 |
+ $t->content_like(qr#renamed dir/a\.txt to dir/b\.txt and added text#); |
|
| 301 |
+ |
|
| 302 |
+} |