/// <summary>
        /// Processes a push message by copying files from Git to a destination repository.
        /// Reports any errors and successfully copied files.
        /// </summary>
        /// <param name="data">The deserialized push message</param>
        /// <returns></returns>
        public async Task<IHttpActionResult> PostAsync(VSOCodePushed data, CancellationToken token)
        {
            _parameters = new HeaderParameters(Request.Headers,
                HEADER_ROOT,
                HEADER_SOURCE_CONNECTIONSTRING,
                HEADER_DESTINATION_CONNECTIONSTRING);

            if (!_parameters.AnyMissing)
            {
                var request = JsonConvert.SerializeObject(data, Formatting.Indented);
                _errorReport.Request = request;
                _changesReport.Request = request;

                _pushEvent = data;
                _token = token;

                var result = await HandleSynchronizePushAsync();
                await SendExceptionReportAsync();
                await SendChangesReportAsync();
                return result;
            }
            else
            {
                return BadRequest("Missing headers");
            }
        }
 private static VSOCodePushed CreateVSOCodePushedRequest(string commitId, string commitDate)
 {
     var push = new VSOCodePushed()
     {
         Resource = new GitPush()
         {
             Commits = new GitCommit[]
             {
                 new GitCommit()
                 {
                     CommitId = commitId,
                     Committer = new GitUserDate()
                     {
                         Date = DateTime.ParseExact(commitDate, "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", CultureInfo.InvariantCulture),
                         Email = "*****@*****.**"
                     }
                 }
             },
             Repository = new GitRepository() { Id = new Guid("0ad49569-db8b-4a8a-b5cc-f7ff009949c8") }
         }
     };
     return push;
 }