Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F3281835
ArcanistSubversionWorkingCopy.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Advanced/Developer...
View Handle
View Hovercard
Size
2 KB
Referenced Files
None
Subscribers
None
ArcanistSubversionWorkingCopy.php
View Options
<?php
final
class
ArcanistSubversionWorkingCopy
extends
ArcanistWorkingCopy
{
public
function
getProjectConfigurationFilePath
(
)
{
// In Subversion, we allow ".arcconfig" to appear at any level of the
// filesystem between the working directory and the working copy root.
// We allow this because Subversion repositories are hierarchical and
// may have a "projects/xyz/" directory which is meaningfully an entirely
// different project from "projects/abc/".
// You can checkout "projects/" and have the ".svn/" directory appear
// there, then change into "abc/" and expect "arc" to operate within the
// context of the "abc/" project.
$paths
=
Filesystem
::
walkToRoot
(
$this
->
getWorkingDirectory
(
)
)
;
$root
=
$this
->
getPath
(
)
;
foreach
(
$paths
as
$path
)
{
if
(
!
Filesystem
::
isDescendant
(
$path
,
$root
)
)
{
break
;
}
$candidate
=
$path
.
'/.arcconfig'
;
if
(
Filesystem
::
pathExists
(
$candidate
)
)
{
return
$candidate
;
}
}
return
parent
::
getProjectConfigurationFilePath
(
)
;
}
public
function
getMetadataDirectory
(
)
{
return
$this
->
getPath
(
'.svn'
)
;
}
protected
function
newWorkingCopyFromDirectories
(
$working_directory
,
$ancestor_directory
)
{
if
(
!
Filesystem
::
pathExists
(
$ancestor_directory
.
'/.svn'
)
)
{
return
null
;
}
return
new
self
(
)
;
}
protected
function
selectFromNestedWorkingCopies
(
array
$candidates
)
{
// To select the best working copy in Subversion, we first walk up the
// tree looking for a working copy with an ".arcconfig" file. If we find
// one, this anchors us.
foreach
(
array_reverse
(
$candidates
)
as
$candidate
)
{
$arcconfig
=
$candidate
->
getPath
(
'.arcconfig'
)
;
if
(
Filesystem
::
pathExists
(
$arcconfig
)
)
{
return
$candidate
;
}
}
// If we didn't find one, we select the outermost working copy. This is
// because older versions of Subversion (prior to 1.7) put a ".svn" file
// in every directory, and all versions of Subversion allow you to check
// out any subdirectory of the project as a working copy.
// We could possibly refine this by testing if the working copy was made
// with a recent version of Subversion and picking the deepest working copy
// if it was, similar to Git and Mercurial.
return
head
(
$candidates
)
;
}
protected
function
newRepositoryAPI
(
)
{
return
new
ArcanistSubversionAPI
(
$this
->
getPath
(
)
)
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Mon, Mar 24, 01:54 (1 d, 10 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1113354
Default Alt Text
ArcanistSubversionWorkingCopy.php (2 KB)
Attached To
Mode
rARC Arcanist
Attached
Detach File
Event Timeline
Log In to Comment