anchor.diff:              p.FileName <- "curl"
               p.Arguments <- (String.concat " " args)
           ) (TimeSpan.FromMinutes 2.)
  -    |> fun response -> 
  +    |> fun response ->
  +        let error = sprintf "Error while posting to HockeyApp.%sMessages: %s%sErrors: %s%s" nl (String.concat "; " response.Messages) nl (String.concat "; " response.Errors) nl
           match response.ExitCode with
  -            | 0 -> JsonConvert.DeserializeObject<HockeyResponse>(response.Messages.[0])
  -            | _ -> failwithf "Error while posting to HockeyApp.\r\nMessages: %s\r\nErrors: %s\r\n" (String.concat "; " response.Messages) (String.concat "; " response.Errors)+            | 0 ->
  +                match Int32.TryParse (response.Messages.[response.Messages.Count - 1].Trim()) with
  +                    | (false, _) -> failwith error
  +                    | (true, responseCode) ->
  +                        match responseCode with
  +                            | 201 -> JsonConvert.DeserializeObject<HockeyResponse>(response.Messages.[0])
  +                            | _ -> failwith error
  +            | _ -> failwith error
positive.code:     /// Release notes for the build
      Notes: string    
  
      /// set the release type of the app
      ReleaseType: ReleaseType
  }
  
  /// The default HockeyApp parameters
  
negative.code: 
  /// [omit]
  let private toCurlArgs param = seq {
      yield (String.Format("-sL -w \"{0}%{{http_code}}{0}\"", Regex.Escape(nl)))
      yield sprintf "-H \"X-HockeyAppToken:%s\"" param.ApiToken
      yield sprintf "-F \"ipa=@%s\"" param.File
      yield sprintf "-F \"notes=%s\"" param.Notes
      yield sprintf "-F \"release_type=%i\"" (int param.ReleaseType)
      if not (String.IsNullOrEmpty param.OwnerId) then yield sprintf "-F \"owner_id=%s\"" param.OwnerId
      yield "https://rink.hockeyapp.net/api/2/apps/upload"
  }
  
  