Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F92651964
DiffusionSvnFileContentQuery.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Nov 22, 10:00
Size
1 KB
Mime Type
text/x-php
Expires
Sun, Nov 24, 10:00 (2 d)
Engine
blob
Format
Raw Data
Handle
22479143
Attached To
rPH Phabricator
DiffusionSvnFileContentQuery.php
View Options
<?php
final
class
DiffusionSvnFileContentQuery
extends
DiffusionFileContentQuery
{
public
function
getFileContentFuture
()
{
$drequest
=
$this
->
getRequest
();
$repository
=
$drequest
->
getRepository
();
$path
=
$drequest
->
getPath
();
$commit
=
$drequest
->
getCommit
();
return
$repository
->
getRemoteCommandFuture
(
'%C %s'
,
$this
->
getNeedsBlame
()
?
'blame --force'
:
'cat'
,
$repository
->
getSubversionPathURI
(
$path
,
$commit
));
}
protected
function
executeQueryFromFuture
(
Future
$future
)
{
try
{
list
(
$corpus
)
=
$future
->
resolvex
();
}
catch
(
CommandException
$ex
)
{
$stderr
=
$ex
->
getStdErr
();
if
(
preg_match
(
'/path not found$/'
,
trim
(
$stderr
)))
{
// TODO: Improve user experience for this. One way to end up here
// is to have the parser behind and look at a file which was recently
// nuked; Diffusion will think it still exists and try to grab content
// at HEAD.
throw
new
Exception
(
pht
(
'Failed to retrieve file content from Subversion. The file may '
.
'have been recently deleted, or the Diffusion cache may be out of '
.
'date.'
));
}
else
{
throw
$ex
;
}
}
$file_content
=
new
DiffusionFileContent
();
$file_content
->
setCorpus
(
$corpus
);
return
$file_content
;
}
protected
function
tokenizeLine
(
$line
)
{
// sample line:
// 347498 yliu function print();
$m
=
array
();
preg_match
(
'/^
\s
*(
\d
+)
\s
+(
\S
+)(?: (.*))?$/'
,
$line
,
$m
);
$rev_id
=
$m
[
1
];
$author
=
$m
[
2
];
$text
=
idx
(
$m
,
3
);
return
array
(
$rev_id
,
$author
,
$text
);
}
}
Event Timeline
Log In to Comment