internal WalkPushConnection(WalkTransport walkTransport, WalkRemoteObjectDatabase w) { transport = (NGit.Transport.Transport)walkTransport; local = transport.local; uri = transport.GetURI(); dest = w; }
/// <exception cref="NGit.Errors.TransportException"></exception> private bool DownloadLooseObject(AnyObjectId id, string looseName, WalkRemoteObjectDatabase remote) { try { byte[] compressed = remote.Open(looseName).ToArray(); VerifyAndInsertLooseObject(id, compressed); return(true); } catch (FileNotFoundException e) { // Not available in a loose format from this alternate? // Try another strategy to get the object. // RecordError(id, e); return(false); } catch (IOException e) { throw new TransportException(MessageFormat.Format(JGitText.Get().cannotDownload, id.Name), e); } }
internal RemotePack(WalkFetchConnection _enclosing, WalkRemoteObjectDatabase c, string pn) { this._enclosing = _enclosing; this.connection = c; this.packName = pn; this.idxName = Sharpen.Runtime.Substring(this.packName, 0, this.packName.Length - 5) + ".idx"; string tn = this.idxName; if (tn.StartsWith("pack-")) { tn = Sharpen.Runtime.Substring(tn, 5); } if (tn.EndsWith(".idx")) { tn = Sharpen.Runtime.Substring(tn, 0, tn.Length - 4); } if (this._enclosing.local.ObjectDatabase is ObjectDirectory) { this.tmpIdx = new FilePath(((ObjectDirectory)this._enclosing.local.ObjectDatabase ).GetDirectory(), "walk-" + tn + ".walkidx"); } }
internal RemotePack(WalkFetchConnection _enclosing, WalkRemoteObjectDatabase c, string pn) { this._enclosing = _enclosing; this.connection = c; this.packName = pn; this.idxName = Sharpen.Runtime.Substring(this.packName, 0, this.packName.Length - 5) + ".idx"; string tn = this.idxName; if (tn.StartsWith("pack-")) { tn = Sharpen.Runtime.Substring(tn, 5); } if (tn.EndsWith(".idx")) { tn = Sharpen.Runtime.Substring(tn, 0, tn.Length - 4); } if (this._enclosing.local.ObjectDatabase is ObjectDirectory) { this.tmpIdx = new FilePath(((ObjectDirectory)this._enclosing.local.ObjectDatabase ).GetDirectory(), "walk-" + tn + ".walkidx"); } }
/// <exception cref="NGit.Errors.TransportException"></exception> private bool DownloadLooseObject(AnyObjectId id, string looseName, WalkRemoteObjectDatabase remote) { try { byte[] compressed = remote.Open(looseName).ToArray(); VerifyAndInsertLooseObject(id, compressed); return true; } catch (FileNotFoundException e) { // Not available in a loose format from this alternate? // Try another strategy to get the object. // RecordError(id, e); return false; } catch (IOException e) { throw new TransportException(MessageFormat.Format(JGitText.Get().cannotDownload, id.Name), e); } }
internal WalkFetchConnection(WalkTransport t, WalkRemoteObjectDatabase w) { NGit.Transport.Transport wt = (NGit.Transport.Transport)t; local = wt.local; objCheck = wt.IsCheckFetchedObjects() ? new ObjectChecker() : null; inserter = local.NewObjectInserter(); reader = local.NewObjectReader(); remotes = new AList<WalkRemoteObjectDatabase>(); remotes.AddItem(w); unfetchedPacks = new List<WalkFetchConnection.RemotePack>(); packsConsidered = new HashSet<string>(); noPacksYet = new List<WalkRemoteObjectDatabase>(); noPacksYet.AddItem(w); noAlternatesYet = new List<WalkRemoteObjectDatabase>(); noAlternatesYet.AddItem(w); fetchErrors = new Dictionary<ObjectId, IList<Exception>>(); packLocks = new AList<PackLock>(4); revWalk = new RevWalk(reader); revWalk.SetRetainBody(false); treeWalk = new TreeWalk(reader); COMPLETE = revWalk.NewFlag("COMPLETE"); IN_WORK_QUEUE = revWalk.NewFlag("IN_WORK_QUEUE"); LOCALLY_SEEN = revWalk.NewFlag("LOCALLY_SEEN"); localCommitQueue = new DateRevQueue(); workQueue = new List<ObjectId>(); }
/// <exception cref="NGit.Errors.TransportException"></exception> private void DownloadObject(ProgressMonitor pm, AnyObjectId id) { if (AlreadyHave(id)) { return; } for (; ;) { // Try a pack file we know about, but don't have yet. Odds are // that if it has this object, it has others related to it so // getting the pack is a good bet. // if (DownloadPackedObject(pm, id)) { return; } // Search for a loose object over all alternates, starting // from the one we last successfully located an object through. // string idStr = id.Name; string subdir = Sharpen.Runtime.Substring(idStr, 0, 2); string file = Sharpen.Runtime.Substring(idStr, 2); string looseName = subdir + "/" + file; for (int i = lastRemoteIdx; i < remotes.Count; i++) { if (DownloadLooseObject(id, looseName, remotes[i])) { lastRemoteIdx = i; return; } } for (int i_1 = 0; i_1 < lastRemoteIdx; i_1++) { if (DownloadLooseObject(id, looseName, remotes[i_1])) { lastRemoteIdx = i_1; return; } } // Try to obtain more pack information and search those. // while (!noPacksYet.IsEmpty()) { WalkRemoteObjectDatabase wrr = noPacksYet.RemoveFirst(); ICollection <string> packNameList; try { pm.BeginTask("Listing packs", ProgressMonitor.UNKNOWN); packNameList = wrr.GetPackNames(); } catch (IOException e) { // Try another repository. // RecordError(id, e); continue; } finally { pm.EndTask(); } if (packNameList == null || packNameList.IsEmpty()) { continue; } foreach (string packName in packNameList) { if (packsConsidered.AddItem(packName)) { unfetchedPacks.AddItem(new WalkFetchConnection.RemotePack(this, wrr, packName)); } } if (DownloadPackedObject(pm, id)) { return; } } // Try to expand the first alternate we haven't expanded yet. // ICollection <WalkRemoteObjectDatabase> al = ExpandOneAlternate(id, pm); if (al != null && !al.IsEmpty()) { foreach (WalkRemoteObjectDatabase alt in al) { remotes.AddItem(alt); noPacksYet.AddItem(alt); noAlternatesYet.AddItem(alt); } continue; } // We could not obtain the object. There may be reasons why. // IList <Exception> failures = fetchErrors.Get((ObjectId)id); TransportException te; te = new TransportException(MessageFormat.Format(JGitText.Get().cannotGet, id.Name )); if (failures != null && !failures.IsEmpty()) { if (failures.Count == 1) { Sharpen.Extensions.InitCause(te, failures[0]); } else { Sharpen.Extensions.InitCause(te, new CompoundException(failures)); } } throw te; } }
internal WalkPushConnection(WalkTransport walkTransport, WalkRemoteObjectDatabase w) { transport = (NGit.Transport.Transport)walkTransport; local = transport.local; uri = transport.GetURI(); dest = w; }