blob: 9319899ddcf602759d024809035957fe063f1a4b [file] [log] [blame]
'use strict';
class Repository extends LabeledObject {
constructor(id, object)
{
super(id, object);
this._url = object.url;
this._blameUrl = object.blameUrl;
this._hasReportedCommits = object.hasReportedCommits;
this._ownerId = object.owner;
this._commitByRevision = new Map;
if (!this._ownerId)
this.ensureNamedStaticMap('topLevelName')[this.name()] = this;
else {
const ownerships = this.ensureNamedStaticMap('repositoryOwnerships');
if (!(this._ownerId in ownerships))
ownerships[this._ownerId] = [this];
else
ownerships[this._ownerId].push(this);
}
}
static findTopLevelByName(name)
{
const map = this.namedStaticMap('topLevelName');
return map ? map[name] : null;
}
commitForRevision(revision) { return this._commitByRevision.get(revision); }
setCommitForRevision(revision, commit) { this._commitByRevision.set(revision, commit); }
hasUrlForRevision() { return !!this._url; }
urlForRevision(currentRevision)
{
return (this._url || '').replace(/\$1/g, currentRevision);
}
urlForRevisionRange(from, to)
{
return (this._blameUrl || '').replace(/\$1/g, from).replace(/\$2/g, to);
}
ownerId()
{
return this._ownerId;
}
ownedRepositories()
{
const ownerships = this.namedStaticMap('repositoryOwnerships');
return ownerships ? ownerships[this.id()] : null;
}
static sortByNamePreferringOnesWithURL(repositories)
{
return repositories.sort(function (a, b) {
if (!!a._blameUrl == !!b._blameUrl) {
if (a.name() > b.name())
return 1;
else if (a.name() < b.name())
return -1;
return 0;
} else if (b._blameUrl) // a > b
return 1;
return -1;
});
}
}
if (typeof module != 'undefined')
module.exports.Repository = Repository;