1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
#include "VcsMapResource.h"
#include "i18n.h"
#include "iversioncontrol.h"
#include "VersionControlLib.h"
#include "stream/VcsMapResourceStream.h"
#include "os/fs.h"
#include "gamelib.h"
#include <fmt/format.h>
namespace map
{
VcsMapResource::VcsMapResource(const std::string& mapFileUri) :
MapResource(vcs::getVcsFilePath(mapFileUri)),
_mapFileUri(mapFileUri)
{
assert(vcs::pathIsVcsUri(_mapFileUri));
auto prefix = vcs::getVcsPrefix(_mapFileUri);
_vcsModule = GlobalVersionControlManager().getModuleForPrefix(prefix);
if (!_vcsModule)
{
rWarning() << "Unrecognised VCS URI prefix: " << prefix << std::endl;
}
auto infoFilePath = vcs::getVcsFilePath(_mapFileUri);
infoFilePath = os::replaceExtension(infoFilePath, game::current::getInfoFileExtension());
_infoFileUri = vcs::constructVcsFileUri(prefix, vcs::getVcsRevision(_mapFileUri), infoFilePath);
}
bool VcsMapResource::load()
{
auto result = MapResource::load();
if (result)
{
// Set the name string to contain the revision of the map
auto mapName = fmt::format("{0}@{1}", os::getFilename(vcs::getVcsFilePath(_mapFileUri)),
vcs::getVcsRevision(_mapFileUri).substr(0, 7));
getRootNode()->setName(mapName);
}
return result;
}
bool VcsMapResource::isReadOnly()
{
return true;
}
void VcsMapResource::save(const MapFormatPtr&)
{
assert(false);
rError() << "VcsMapResources cannot be saved." << std::endl;
}
stream::MapResourceStream::Ptr VcsMapResource::openMapfileStream()
{
return openFileFromVcs(_mapFileUri);
}
stream::MapResourceStream::Ptr VcsMapResource::openInfofileStream()
{
return openFileFromVcs(_infoFileUri);
}
stream::MapResourceStream::Ptr VcsMapResource::openFileFromVcs(const std::string& uri)
{
if (!_vcsModule || !vcs::pathIsVcsUri(uri))
{
return stream::MapResourceStream::Ptr();
}
return stream::VcsMapResourceStream::OpenFromVcs(*_vcsModule, uri);
}
}
|