/// <exception cref="NGit.Errors.TransportException"></exception> private Ref ReadRef(SortedDictionary <string, Ref> avail, string rn) { string s; string @ref = WalkRemoteObjectDatabase.ROOT_DIR + rn; try { BufferedReader br = this.OpenReader(@ref); try { s = br.ReadLine(); } finally { br.Close(); } } catch (FileNotFoundException) { return(null); } catch (IOException err) { throw new TransportException(this.GetURI(), MessageFormat.Format(JGitText.Get().transportExceptionReadRef , @ref), err); } if (s == null) { throw new TransportException(this.GetURI(), MessageFormat.Format(JGitText.Get().transportExceptionEmptyRef , rn)); } if (s.StartsWith("ref: ")) { string target = Sharpen.Runtime.Substring(s, "ref: ".Length); Ref r = avail.Get(target); if (r == null) { r = this.ReadRef(avail, target); } if (r == null) { r = new ObjectIdRef.Unpeeled(RefStorage.NEW, target, null); } r = new SymbolicRef(rn, r); avail.Put(r.GetName(), r); return(r); } if (ObjectId.IsId(s)) { Ref r = new ObjectIdRef.Unpeeled(this.Loose(avail.Get(rn)), rn, ObjectId.FromString (s)); avail.Put(r.GetName(), r); return(r); } throw new TransportException(this.GetURI(), MessageFormat.Format(JGitText.Get().transportExceptionBadRef , rn, s)); }
/// <exception cref="NGit.Errors.TransportException"></exception> private Ref ReadRef(SortedDictionary <string, Ref> avail, string path, string name ) { string line; try { BufferedReader br = this.OpenReader(path); try { line = br.ReadLine(); } finally { br.Close(); } } catch (FileNotFoundException) { return(null); } catch (IOException err) { throw new TransportException("Cannot read " + this.objectsPath + "/" + path + ": " + err.Message, err); } if (line == null) { throw new TransportException("Empty ref: " + name); } if (line.StartsWith("ref: ")) { string target = Sharpen.Runtime.Substring(line, "ref: ".Length); Ref r = avail.Get(target); if (r == null) { r = this.ReadRef(avail, WalkRemoteObjectDatabase.ROOT_DIR + target, target); } if (r == null) { r = new ObjectIdRef.Unpeeled(RefStorage.NEW, target, null); } r = new SymbolicRef(name, r); avail.Put(r.GetName(), r); return(r); } if (ObjectId.IsId(line)) { Ref r = new ObjectIdRef.Unpeeled(this.Loose(avail.Get(name)), name, ObjectId.FromString (line)); avail.Put(r.GetName(), r); return(r); } throw new TransportException("Bad ref: " + name + ": " + line); }
/// <exception cref="System.IO.IOException"></exception> /// <exception cref="NGit.Errors.PackProtocolException"></exception> private FetchConnection NewDumbConnection(InputStream @in) { TransportHttp.HttpObjectDB d = new TransportHttp.HttpObjectDB(this, objectsUrl); BufferedReader br = ToBufferedReader(@in); IDictionary <string, Ref> refs; try { refs = d.ReadAdvertisedImpl(br); } finally { br.Close(); } if (!refs.ContainsKey(Constants.HEAD)) { // If HEAD was not published in the info/refs file (it usually // is not there) download HEAD by itself as a loose file and do // the resolution by hand. // HttpURLConnection conn = HttpOpen(new Uri(baseUrl, Constants.HEAD)); int status = HttpSupport.Response(conn); switch (status) { case HttpURLConnection.HTTP_OK: { br = ToBufferedReader(OpenInputStream(conn)); try { string line = br.ReadLine(); if (line != null && line.StartsWith(RefDirectory.SYMREF)) { string target = Sharpen.Runtime.Substring(line, RefDirectory.SYMREF.Length); Ref r = refs.Get(target); if (r == null) { r = new ObjectIdRef.Unpeeled(RefStorage.NEW, target, null); } r = new SymbolicRef(Constants.HEAD, r); refs.Put(r.GetName(), r); } else { if (line != null && ObjectId.IsId(line)) { Ref r = new ObjectIdRef.Unpeeled(RefStorage.NETWORK, Constants.HEAD, ObjectId.FromString (line)); refs.Put(r.GetName(), r); } } } finally { br.Close(); } break; } case HttpURLConnection.HTTP_NOT_FOUND: { break; } default: { throw new TransportException(uri, MessageFormat.Format(JGitText.Get().cannotReadHEAD , status, conn.GetResponseMessage())); } } } WalkFetchConnection wfc = new WalkFetchConnection(this, d); wfc.Available(refs); return(wfc); }