public virtual void TestForceRemotesOrigin() { string srcn = "refs/heads/*"; string dstn = "refs/remotes/origin/*"; RefSpec rs = new RefSpec("+" + srcn + ":" + dstn); NUnit.Framework.Assert.IsTrue(rs.IsForceUpdate()); NUnit.Framework.Assert.IsTrue(rs.IsWildcard()); NUnit.Framework.Assert.AreEqual(srcn, rs.GetSource()); NUnit.Framework.Assert.AreEqual(dstn, rs.GetDestination()); NUnit.Framework.Assert.AreEqual("+" + srcn + ":" + dstn, rs.ToString()); NUnit.Framework.Assert.AreEqual(rs, new RefSpec(rs.ToString())); Ref r; RefSpec expanded; r = new ObjectIdRef.Unpeeled(RefStorage.LOOSE, "refs/heads/master", null); NUnit.Framework.Assert.IsTrue(rs.MatchSource(r)); NUnit.Framework.Assert.IsFalse(rs.MatchDestination(r)); expanded = rs.ExpandFromSource(r); NUnit.Framework.Assert.AreNotSame(rs, expanded); NUnit.Framework.Assert.IsTrue(expanded.IsForceUpdate()); NUnit.Framework.Assert.IsFalse(expanded.IsWildcard()); NUnit.Framework.Assert.AreEqual(r.GetName(), expanded.GetSource()); NUnit.Framework.Assert.AreEqual("refs/remotes/origin/master", expanded.GetDestination ()); r = new ObjectIdRef.Unpeeled(RefStorage.LOOSE, "refs/remotes/origin/next", null); NUnit.Framework.Assert.IsFalse(rs.MatchSource(r)); NUnit.Framework.Assert.IsTrue(rs.MatchDestination(r)); r = new ObjectIdRef.Unpeeled(RefStorage.LOOSE, "refs/tags/v1.0", null); NUnit.Framework.Assert.IsFalse(rs.MatchSource(r)); NUnit.Framework.Assert.IsFalse(rs.MatchDestination(r)); }
/// <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); }