anchor.diff:        Unlisted : bool
         DownloadUrl : string}
   
  -let rec private followODataLink auth url = 
  -    async { 
  -        let! raw = getFromUrl (auth, url)
  +let rec private followODataLink getUrlContents url = 
  +    async { 
  +        let! raw = getUrlContents url
           let doc = XmlDocument()
           doc.LoadXml raw
           let feed = 
  
positive.code:     }
  
  /// Gets versions of the given package via OData via /Packages?$filter=Id eq 'packageId'
  let getAllVersionsFromNugetODataWithFilter (auth, nugetURL, package) = 
      // we cannot cache this
      followODataLink auth (sprintf "%s/Packages?$filter=Id eq '%s'" nugetURL package)
  
  /// Gets versions of the given package via OData via /FindPackagesById()?id='packageId'.
  let getAllVersionsFromNugetOData (auth, nugetURL, package) = 
      async { 
          // we cannot cache this
          try 
              let url = sprintf "%s/FindPackagesById()?id='%s'" nugetURL package
              return! followODataLink auth url
          with _ -> return! getAllVersionsFromNugetODataWithFilter (auth, nugetURL, package)
      }
  
  /// Gets all versions no. of the given package.
  
negative.code:     async { 
          let! raw = safeGetFromUrl(auth,sprintf "%s/package-versions/%s?includePrerelease=true" nugetURL package)
          match raw with
          | None -> let! result = getAllVersionsFromNugetOData(auth, nugetURL, package)
                    return result
          | Some data -> 
              try 
                  try 
                      let result = JsonConvert.DeserializeObject<string []>(data) |> Array.toSeq
                      return result
                  with _ -> let! result = getAllVersionsFromNugetOData(auth, nugetURL, package)
                            return result
              with exn -> 
                  return! failwithf "Could not get data from %s for package %s.%s Message: %s" nugetURL package 
  