mirror of
https://gitlab.gnome.org/GNOME/gitg
synced 2024-08-27 20:09:23 +00:00
Added refs_for_id to repository
This commit is contained in:
parent
69cc534b51
commit
57301f326f
|
@ -3,6 +3,8 @@ namespace Gitg
|
|||
|
||||
public class Repository : Ggit.Repository
|
||||
{
|
||||
private HashTable<Ggit.OId, SList<Gitg.Ref>> d_refs;
|
||||
|
||||
public Repository(File location, File? workdir) throws Error
|
||||
{
|
||||
Object(location: location,
|
||||
|
@ -11,6 +13,62 @@ public class Repository : Ggit.Repository
|
|||
((Initable)this).init(null);
|
||||
}
|
||||
|
||||
private void ensure_refs()
|
||||
{
|
||||
if (d_refs != null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
d_refs = new HashTable<Ggit.OId, SList<Gitg.Ref>>(Ggit.OId.hash,
|
||||
Ggit.OId.equal);
|
||||
|
||||
try
|
||||
{
|
||||
references_foreach(Ggit.RefType.LISTALL, (name) => {
|
||||
Gitg.Ref? r;
|
||||
|
||||
try
|
||||
{
|
||||
r = lookup_reference(name);
|
||||
}
|
||||
catch { return 0; }
|
||||
|
||||
if (r != null)
|
||||
{
|
||||
Ggit.OId? id = r.get_id();
|
||||
|
||||
if (id != null)
|
||||
{
|
||||
unowned SList<Gitg.Ref> refs;
|
||||
|
||||
if (d_refs.lookup_extended(id, null, out refs))
|
||||
{
|
||||
refs.append(r);
|
||||
}
|
||||
else
|
||||
{
|
||||
SList<Gitg.Ref> nrefs = new SList<Gitg.Ref>();
|
||||
nrefs.append(r);
|
||||
|
||||
d_refs.insert(id, (owned)nrefs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
});
|
||||
}
|
||||
catch {}
|
||||
}
|
||||
|
||||
public unowned SList<Gitg.Ref> refs_for_id(Ggit.OId id)
|
||||
{
|
||||
ensure_refs();
|
||||
|
||||
return d_refs.lookup(id);
|
||||
}
|
||||
|
||||
// Wrappers for Gitg.Ref
|
||||
public new Ref lookup_reference(string name) throws Error
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue