private void HandleAllPropVccDefault(TFSSourceControlProvider sourceControlProvider, string requestPath, Stream stream)
        {
            // TODO:
            int  latestVersion = GetSDKObject().GetLastestVersionNum(requestPath);
            Guid id            = Guid.NewGuid();

            using (StreamWriter writer = new StreamWriter(stream))
            {
                writer.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
                writer.Write("<D:multistatus xmlns:D=\"DAV:\" xmlns:ns0=\"DAV:\">\n");
                writer.Write("<D:response xmlns:lp1=\"DAV:\" xmlns:lp2=\"http://subversion.tigris.org/xmlns/dav/\">\n");
                writer.Write("<D:href>" + GetLocalPath("/!svn/vcc/default") + "</D:href>\n");
                writer.Write("<D:propstat>\n");
                writer.Write("<D:prop>\n");
                writer.Write("<lp1:checked-in><D:href>" + GetLocalPath("/!svn/bln/" + latestVersion) + "</D:href></lp1:checked-in>\n");
                writer.Write("<lp2:repository-uuid>" + id + "</lp2:repository-uuid>\n");
                writer.Write("<D:supportedlock>\n");
                writer.Write("<D:lockentry>\n");
                writer.Write("<D:lockscope><D:exclusive/></D:lockscope>\n");
                writer.Write("<D:locktype><D:write/></D:locktype>\n");
                writer.Write("</D:lockentry>\n");
                writer.Write("</D:supportedlock>\n");
                writer.Write("<D:lockdiscovery/>\n");
                writer.Write("</D:prop>\n");
                writer.Write("<D:status>HTTP/1.1 200 OK</D:status>\n");
                writer.Write("</D:propstat>\n");
                writer.Write("</D:response>\n");
                writer.Write("</D:multistatus>\n");
            }
        }
 private FolderMetaData GetFolderInfo(TFSSourceControlProvider sourceControlProvider,
                                      string depth,
                                      string path,
                                      int?version,
                                      bool loadPropertiesFromFile)
 {
     if (depth == "0")
     {
         FolderMetaData folderInfo = new FolderMetaData();
         ItemMetaData   item       =
             GetItems(sourceControlProvider, version.HasValue ? version.Value : -1, path, Recursion.None, loadPropertiesFromFile);
         folderInfo.Items.Add(item);
         return(folderInfo);
     }
     else if (depth == "1")
     {
         FolderMetaData data =
             (FolderMetaData)GetItems(sourceControlProvider, version.HasValue ? version.Value : -1, path, Recursion.OneLevel, loadPropertiesFromFile);
         return(data);
     }
     else
     {
         throw new InvalidOperationException(String.Format("Depth not supported: {0}", depth));
     }
 }
        private void WritePathResponse(TFSSourceControlProvider sourceControlProvider,
                                       string requestPath,
                                       string depth,
                                       PropData data,
                                       Stream outputStream)
        {
            //   if (!sourceControlProvider.ItemExists(Helper.Decode(requestPath), -1))

            if (!GetSDKObject().FileExists(Helper.Decode(requestPath), -1))
            {
                throw new FileNotFoundException("Unable to find file '" + requestPath + "'in the source control repository",
                                                requestPath);
            }

            FolderMetaData folderInfo = GetFolderInfo(sourceControlProvider, depth, requestPath, null, true);

            using (StreamWriter writer = new StreamWriter(outputStream))
            {
                writer.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");

                WriteMultiStatusStart(writer, data.Properties);

                foreach (ItemMetaData item in folderInfo.Items)
                {
                    INode node = new FileNode(item, sourceControlProvider);

                    WriteProperties(node, data.Properties, writer, item.ItemType == ItemType.Folder);
                }

                writer.Write("</D:multistatus>\n");
            }
        }
        protected override void Handle(IHttpContext context, TFSSourceControlProvider sourceControlProvider)
        {
            IHttpRequest request = context.Request;
            IHttpResponse response = context.Response;

            SetResponseSettings(response, "text/html", Encoding.UTF8, 201);

            string activityId = PathParser.GetActivityIdFromDestination(request.Headers["Destination"]);

            string path = GetPath(request);
            path = path.Substring(path.IndexOf('/', 9));

            string destination = PathParser.GetPathFromDestination(Helper.DecodeC(request.Headers["Destination"]));
            string targetPath = destination.Substring(destination.IndexOf('/', 12));
            sourceControlProvider.CopyItem(activityId, path, targetPath);

            response.AppendHeader("Location", Helper.DecodeC(request.Headers["Destination"]));

            string responseContent =
                "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n" +
                "<html><head>\n" +
                "<title>201 Created</title>\n" +
                "</head><body>\n" +
                "<h1>Created</h1>\n" +
                "<p>Destination /" + Helper.EncodeB(destination) + " has been created.</p>\n" +
                "<hr />\n" +
                "<address>Apache at " + request.Url.Host + " Port " +
                request.Url.Port + "</address>\n" +
                "</body></html>\n";

            WriteToResponse(response, responseContent);
        }
        protected override void Handle(IHttpContext context,
                                       TFSSourceControlProvider sourceControlProvider)
        {
            IHttpRequest  request  = context.Request;
            IHttpResponse response = context.Response;

            string path       = GetPath(request);
            string activityId = path.Substring(10);

            sourceControlProvider.MakeActivity(activityId);

            SetResponseSettings(response, "text/html", Encoding.UTF8, 201);

            response.AppendHeader("Cache-Control", "no-cache");
            response.AppendHeader("Location", "http://" + request.Headers["Host"] + path);
            response.AppendHeader("X-Pad", "avoid browser bug");

            string responseContent = "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n" +
                                     "<html><head>\n" +
                                     "<title>201 Created</title>\n" +
                                     "</head><body>\n" +
                                     "<h1>Created</h1>\n" +
                                     "<p>Activity " + path + " has been created.</p>\n" +
                                     "<hr />\n" +
                                     "<address>Apache at " + request.Url.Host +
                                     " Port " + request.Url.Port + "</address>\n" +
                                     "</body></html>\n";

            WriteToResponse(response, responseContent);
        }
        protected override void Handle(IHttpContext context,
                                       TFSSourceControlProvider sourceControlProvider)
        {
            IHttpRequest  request  = context.Request;
            IHttpResponse response = context.Response;

            string path = GetPath(request);

            bool fileDeleted = Delete(sourceControlProvider, path);

            if (fileDeleted)
            {
                SetResponseSettings(response, "text/plain", Encoding.UTF8, 204);
            }
            else
            {
                SetResponseSettings(response, "text/html; charset=iso-8859-1", Encoding.UTF8, 404);

                string responseContent =
                    "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n" +
                    "<html><head>\n" +
                    "<title>404 Not Found</title>\n" +
                    "</head><body>\n" +
                    "<h1>Not Found</h1>\n" +
                    "<p>The requested URL /" + Helper.Decode(path) + " was not found on this server.</p>\n" +
                    "<hr>\n" +
                    "<address>Apache at " + request.Url.Host + " Port " +
                    request.Url.Port + "</address>\n" +
                    "</body></html>\n";

                WriteToResponse(response, responseContent);
            }
        }
Ejemplo n.º 7
0
        private void ReplayReport(IHttpRequest request, IHttpResponse response, TFSSourceControlProvider sourceControlProvider, ReplayReportData replayReport)
        {
            if (replayReport.Revision == 0)
            {
                response.StatusCode = (int)HttpStatusCode.OK;
                using (var output = new StreamWriter(response.OutputStream))
                {
                    output.Write(
                        @"<?xml version=""1.0"" encoding=""utf-8""?>
<S:editor-report xmlns:S=""svn:"">
<S:target-revision rev=""0""/>
</S:editor-report>");
                    return;
                }
            }

            var data = new UpdateReportData();

            data.SrcPath = request.Url.AbsoluteUri;
            data.Entries = new List <EntryData>();
            var     item      = new EntryData();
            string  localPath = PathParser.GetLocalPath(request);
            LogItem log       = sourceControlProvider.GetLog(localPath, 0,
                                                             sourceControlProvider.GetLatestVersion(),
                                                             Recursion.None, 1);

            if (log.History.Length == 0)
            {
                WriteFileNotFoundResponse(request, response);
            }

            item.Rev            = (replayReport.Revision - 1).ToString();
            data.TargetRevision = (replayReport.Revision).ToString();
            data.Entries.Add(item);
            SetResponseSettings(response, "text/xml; charset=\"utf-8\"", Encoding.UTF8, 200);
            response.SendChunked = true;
            using (var output = new StreamWriter(response.OutputStream))
            {
                try
                {
                    output.Write(@"<?xml version=""1.0"" encoding=""utf-8""?>
<S:editor-report xmlns:S=""svn:"">");

                    int            targetRevision;
                    FolderMetaData metadata = GetMetadataForUpdate(request, data, sourceControlProvider,
                                                                   out targetRevision);
                    output.WriteLine("<S:target-revision rev=\"{0}\"/>", targetRevision);

                    OutputEditorReport(sourceControlProvider, metadata, replayReport.Revision,
                                       localPath == "/",
                                       output);

                    output.Write("</S:editor-report>");
                }
                catch (FileNotFoundException)
                {
                    WriteFileNotFoundResponse(request, response);
                }
            }
        }
        private void WriteWrkResponse(TFSSourceControlProvider sourceControlProvider,
                                      string requestPath,
                                      string depth,
                                      PropData data,
                                      Stream outputStream)
        {
            string activityId = requestPath.Split('/')[3];

            if (depth != "0")
            {
                throw new InvalidOperationException(String.Format("Depth not supported: {0}", depth));
            }
            string       path = requestPath.Substring(11 + activityId.Length);
            ItemMetaData item = sourceControlProvider.GetItemInActivity(activityId, Helper.Decode(path));

            if (item == null)
            {
                throw new FileNotFoundException("Unable to find file '" + path + "'in the specified activity", path);
            }

            using (StreamWriter writer = new StreamWriter(outputStream))
            {
                writer.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
                WriteMultiStatusStart(writer, data.Properties);
                INode node = new FileNode(item, sourceControlProvider);
                WriteProperties(node, data.Properties, writer, item.ItemType == ItemType.Folder);
                writer.Write("</D:multistatus>\n");
            }
        }
Ejemplo n.º 9
0
        private bool Put(TFSSourceControlProvider sourceControlProvider, string path, Stream inputStream, string baseHash, string resultHash)
        {
            if (!path.StartsWith("//"))
            {
                path = "/" + path;
            }

            string activityId = path.Substring(11, path.IndexOf('/', 11) - 11);
            string serverPath = Helper.Decode(path.Substring(11 + activityId.Length));

            byte[] sourceData = new byte[0];
            if (baseHash != null)
            {
                ItemMetaData item = sourceControlProvider.GetItemInActivity(activityId, serverPath);
                sourceData = sourceControlProvider.ReadFile(item);
                if (ChecksumMismatch(baseHash, sourceData))
                {
                    throw new Exception("Checksum mismatch with base file");
                }
            }
            byte[] fileData = SvnDiffParser.ApplySvnDiffsFromStream(inputStream, sourceData);
            if (fileData.Length > 0)
            {
                if (ChecksumMismatch(resultHash, fileData))
                {
                    throw new Exception("Checksum mismatch with new file");
                }
            }
            return(sourceControlProvider.WriteFile(activityId, serverPath, fileData));
        }
Ejemplo n.º 10
0
        protected override void Handle(IHttpContext context, TFSSourceControlProvider sourceControlProvider)
        {
            IHttpRequest  request  = context.Request;
            IHttpResponse response = context.Response;

            string path    = GetPath(request);
            bool   created = Put(sourceControlProvider, path, request.InputStream, request.Headers["X-SVN-Base-Fulltext-MD5"], request.Headers["X-SVN-Result-Fulltext-MD5"]);

            if (created)
            {
                SetResponseSettings(response, "text/html", Encoding.UTF8, 201);

                response.AppendHeader("Location", "http://" + request.Headers["Host"] + "/" + Helper.Decode(path));

                string responseContent = "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n" +
                                         "<html><head>\n" +
                                         "<title>201 Created</title>\n" +
                                         "</head><body>\n" +
                                         "<h1>Created</h1>\n" +
                                         "<p>Resource /" + Helper.EncodeB(Helper.Decode(path)) +
                                         " has been created.</p>\n" +
                                         "<hr />\n" +
                                         "<address>Apache at " + request.Url.Host +
                                         " Port " + request.Url.Port + "</address>\n" +
                                         "</body></html>\n";

                WriteToResponse(response, responseContent);
            }
            else
            {
                SetResponseSettings(response, "text/plain", Encoding.UTF8, 204);
            }
        }
        private void OutputLogResponse(string path, PropertyUpdateData request, TFSSourceControlProvider sourceControlProvider, bool extendedNamespaces, string activityId, TextWriter output)
        {
            // TODO:
            ActivityRepository.Use(activityId, delegate(Activity activity)
            {
                activity.Comment = request.Set.Prop.Properties[0].InnerText;
            });
            output.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
            if (extendedNamespaces)
            {
                output.Write("<D:multistatus xmlns:D=\"DAV:\" xmlns:ns3=\"http://subversion.tigris.org/xmlns/dav/\" xmlns:ns2=\"http://subversion.tigris.org/xmlns/custom/\" xmlns:ns1=\"http://subversion.tigris.org/xmlns/svn/\" xmlns:ns0=\"DAV:\">\n");
            }
            else
            {
                output.Write("<D:multistatus xmlns:D=\"DAV:\" xmlns:ns1=\"http://subversion.tigris.org/xmlns/svn/\" xmlns:ns0=\"DAV:\">\n");
            }

            output.Write("<D:response>\n");
            output.Write("<D:href>" + GetLocalPath("/" + path) + "</D:href>\n");
            output.Write("<D:propstat>\n");
            output.Write("<D:prop>\n");
            output.Write("<ns1:log/>\r\n");
            output.Write("</D:prop>\n");
            output.Write("<D:status>HTTP/1.1 200 OK</D:status>\n");
            output.Write("</D:propstat>\n");
            output.Write("</D:response>\n");
            output.Write("</D:multistatus>\n");
        }
 public BcFileNode(int requestVersion,
                   ItemMetaData item,
                   TFSSourceControlProvider sourceControlProvider)
 {
     this.requestVersion = requestVersion;
     this.item           = item;
     node = new FileNode(item, sourceControlProvider);
 }
 private ItemMetaData GetItems(TFSSourceControlProvider sourceControlProvider,
                               int version,
                               string path,
                               Recursion recursion,
                               bool loadPropertiesFromFile)
 {
     return(QueryItems(path, version, recursion));
 }
        public virtual void Handle(IHttpContext context, IPathParser pathParser, NetworkCredential credentials)
        {
            this.credentials = credentials;
            Initialize(context, pathParser);
            sourceControlProvider = Container.Resolve <TFSSourceControlProvider>();

            Handle(context, sourceControlProvider);
        }
Ejemplo n.º 15
0
        private bool Put(TFSSourceControlProvider sourceControlProvider, string path, Stream inputStream, string baseHash, string resultHash)
        {
            if (!path.StartsWith("//"))
            {
                path = "/" + path;
            }

            string activityId = path.Substring(11, path.IndexOf('/', 11) - 11);
            string serverPath = Helper.Decode(path.Substring(11 + activityId.Length));

            byte[] sourceData = ReadFile(serverPath, GetSDKObject().GetLastestVersionNum(serverPath));

            /*
             * if (baseHash != null)
             * {
             *  // TODONEXT:
             *  // ItemMetaData item = sourceControlProvider.GetItemInActivity(activityId, serverPath);
             *  ItemMetaData item = new ItemMetaData();
             *  item.Name = serverPath;
             *  GetData(item);
             *  sourceData = null;
             * //   sourceData = sourceControlProvider.ReadFile(item);
             *  if (ChecksumMismatch(baseHash, sourceData))
             *  {
             *      throw new Exception("Checksum mismatch with base file");
             *  }
             * }*/

            if (baseHash != null && sourceData != null && ChecksumMismatch(baseHash, sourceData))
            {
                throw new ConflictException();
                //    throw new Exception("Checksum mismatch with base file, please save your work, recheckout the project, apply changes, and try to commit again.");
            }

            byte[] fileData = SvnDiffParser.ApplySvnDiffsFromStream(inputStream, sourceData);
            string data     = string.Format("{0}", fileData);

            if (fileData.Length > 0)
            {
                if (resultHash != null && fileData != null && ChecksumMismatch(resultHash, fileData))
                {
                    throw new ConflictException();
                    //    throw new Exception("Checksum mismatch with new file, , please save your work, recheckout the project, apply changes, and try to commit again.");
                }
            }


            bool bRet = true;

            ActivityRepository.Use(activityId, delegate(Activity activity)
            {
                activity.MergeList.Add(new ActivityItem(serverPath, CodePlex.TfsLibrary.RepositoryWebSvc.ItemType.File, ActivityItemAction.Updated));

                bRet = WriteData(serverPath, fileData, activity.Comment);
            });

            return(bRet);
        }
 public SvnVccDefaultNode(TFSSourceControlProvider sourceControlProvider,
                          string path,
                          string label, int nLatestVer)
 {
     this.sourceControlProvider = sourceControlProvider;
     this.path       = path;
     this.label      = label;
     this.nLatestVer = nLatestVer;
 }
Ejemplo n.º 17
0
 private void Options(TFSSourceControlProvider sourceControlProvider, string path, Stream outputStream)
 {
     using (StreamWriter output = new StreamWriter(outputStream))
     {
         output.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
         output.Write("<D:options-response xmlns:D=\"DAV:\">\n");
         output.Write("<D:activity-collection-set><D:href>" + GetLocalPath("/!svn/act/") + "</D:href></D:activity-collection-set></D:options-response>\n");
     }
 }
        protected override void Handle(IHttpContext context, TFSSourceControlProvider sourceControlProvider)
        {
            IHttpRequest  request  = context.Request;
            IHttpResponse response = context.Response;

            SetResponseSettings(response, "text/xml; charset=\"utf-8\"", Encoding.UTF8, 200);
            string path = GetPath(request);

            GetSDKObject().Lock(path);
            Guid token = Guid.NewGuid();

            response.AppendHeader("X-SVN-Creation-Date", System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.000000Z"));
            response.AppendHeader("X-SVN-Lock-Owner", UserInfo.strUserName);
            string strToken = "<opaquelocktoken:" + token + ">";

            response.AppendHeader("Lock-Token", strToken);

            string responseContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                                     "<D:prop xmlns:D=\"DAV:\">\n" +
                                     "<D:lockdiscovery>\n" +
                                     "<D:activelock>\n" +
                                     "<D:locktype><D:write/></D:locktype>\n" +
                                     "<D:lockscope><D:exclusive/></D:lockscope>\n" +
                                     "<D:depth>0</D:depth>\n" +
                                     "<ns0:owner xmlns:ns0=\"DAV:\"/><D:timeout>Infinite</D:timeout>\n" +
                                     "<D:locktoken>\n" +
                                     "<D:href>opaquelocktoken:" + token + "</D:href>\n" +
                                     "</D:locktoken>\n" +
                                     "</D:activelock>\n" +
                                     "</D:lockdiscovery>\n" +
                                     "</D:prop>";

            /*
             * string responseContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
             * "<D:prop xmlns:D=\"DAV:\">" +
             * "<D:lockdiscovery>" +
             * "<D:activelock>" +
             * "<D:locktype><D:write/></D:locktype>" +
             * "<D:lockscope><D:exclusive/></D:lockscope>" +
             * "<D:depth>0</D:depth>" +
             * "<ns0:owner xmlns:ns0=\"DAV:\"/><D:timeout>Infinite</D:timeout>" +
             * "<D:locktoken>" +
             * "<D:href>opaquelocktoken:fc8422b9-b191-4340-834e-ef40046aaa32</D:href>" +
             * "</D:locktoken>" +
             * "</D:activelock>" +
             * "</D:lockdiscovery>" +
             * "</D:prop>4b-bfe3-7bb243e65697</lp2:repository-uuid>" +
             * "</D:prop>" +
             * "<D:status>HTTP/1.1 200 OK</D:status>" +
             * "</D:propstat>" +
             * "</D:response>" +
             * "</D:multistatus>" +
             * "tivity-collection-set></D:options-response>";
             */
            WriteToResponse(response, responseContent);
        }
        private void HandleAllProp(TFSSourceControlProvider sourceControlProvider, string requestPath, Stream outputStream)
        {
            int    revision;
            string path;
            bool   bcPath = false;

            if (requestPath.StartsWith("/!svn/bc"))
            {
                bcPath   = true;
                revision = int.Parse(requestPath.Split('/')[3]);
                path     = requestPath.Substring("/!svn/bc/".Length + revision.ToString().Length);
            }
            else
            {
                const string latestVersion = "Repository.Latest.Version";
                if (RequestCache.Items[latestVersion] != null)
                {
                    revision = (int)RequestCache.Items[latestVersion];
                }
                else
                {
                    revision = GetSDKObject().GetLastestVersionNum(requestPath);
                }
                //    revision = sourceControlProvider.GetItems(-1, requestPath, Recursion.None).Revision;
                path = requestPath;
            }

            ItemMetaData item = GetItems(sourceControlProvider, revision, path, Recursion.None, true);

            if (item == null)
            {
                if (IsSvnRequestForProjectCreation(path, revision, sourceControlProvider))
                {
                    item      = GetItems(sourceControlProvider, revision, "", Recursion.None, true);
                    item.Name = "trunk";
                }

                if (item == null)
                {
                    throw new FileNotFoundException("There is no item " + requestPath + " in revision " + revision);
                }
            }

            using (StreamWriter writer = new StreamWriter(outputStream))
            {
                if (item.ItemType == ItemType.Folder)
                {
                    WriteAllPropForFolder(writer, requestPath, item, bcPath, sourceControlProvider);
                }
                else
                {
                    //   WriteAllPropForItem(writer, requestPath, item, sourceControlProvider.ReadFile(item), sourceControlProvider);
                    WriteAllPropForItem(writer, requestPath, item, new byte[1], sourceControlProvider);
                }
            }
        }
        private bool IsSvnRequestForProjectCreation(string requestPath, int version, TFSSourceControlProvider sourceControlProvider)
        {
            requestPath = Helper.Decode(requestPath);

            bool isSvnPath = (requestPath.Equals("/trunk", StringComparison.OrdinalIgnoreCase) ||
                              requestPath.Equals("/branches", StringComparison.OrdinalIgnoreCase) ||
                              requestPath.Equals("/tags", StringComparison.OrdinalIgnoreCase));

            return(isSvnPath && version == sourceControlProvider.GetEarliestVersion(string.Empty));
        }
Ejemplo n.º 21
0
        private void GetDatedRevReport(TFSSourceControlProvider sourceControlProvider, DatedRevReportData data, TextWriter output)
        {
            int targetRevision = sourceControlProvider.GetVersionForDate(data.CreationDate);

            output.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
            output.Write("<S:dated-rev-report xmlns:S=\"svn:\" xmlns:D=\"DAV:\">\n");
            output.Write("<D:version-name>");
            output.Write(targetRevision);
            output.Write("</D:version-name></S:dated-rev-report>");
        }
Ejemplo n.º 22
0
        protected override void Handle(IHttpContext context, TFSSourceControlProvider sourceControlProvider)
        {
            IHttpRequest  request  = context.Request;
            IHttpResponse response = context.Response;

            try
            {
                string path    = GetPath(request);
                bool   created = Put(sourceControlProvider, path, request.InputStream, request.Headers["X-SVN-Base-Fulltext-MD5"], request.Headers["X-SVN-Result-Fulltext-MD5"]);

                if (created)
                {
                    SetResponseSettings(response, "text/html", Encoding.UTF8, 201);

                    response.AppendHeader("Location", "http://" + request.Headers["Host"] + "/" + Helper.Decode(path));

                    string responseContent = "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n" +
                                             "<html><head>\n" +
                                             "<title>201 Created</title>\n" +
                                             "</head><body>\n" +
                                             "<h1>Created</h1>\n" +
                                             "<p>Resource /" + Helper.EncodeB(Helper.Decode(path)) +
                                             " has been created.</p>\n" +
                                             "<hr />\n" +
                                             "<address>Apache at" + request.Url.Host +
                                             " Port " + request.Url.Port + "</address>\n" +
                                             "</body></html>\n";

                    WriteToResponse(response, responseContent);
                }
                else
                {
                    SetResponseSettings(response, "text/plain", Encoding.UTF8, 204);
                }
            }
            catch (ConflictException ex)
            {
                RequestCache.Items["RequestBody"] = null;
                DefaultLogger logger = Container.Resolve <DefaultLogger>();
                logger.ErrorFullDetails(ex, context);

                SetResponseSettings(response, "text/xml; charset=\"utf-8\"", Encoding.UTF8, 409);
                string responseContent =
                    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                    "<D:error xmlns:D=\"DAV:\" xmlns:m=\"http://apache.org/dav/xmlns\" xmlns:C=\"svn:\">\n" +
                    "<C:error/>\n" +
                    "<m:human-readable errcode=\"160024\">\n" +
                    "The version resource does not correspond to the resource within the transaction.  Either the requested version resource is out of date (needs to be updated), or the requested version resource is newer than the transaction root (restart the commit).\n" +
                    "</m:human-readable>\n" +
                    "</D:error>\n";
                WriteToResponse(response, responseContent);
            }
        }
Ejemplo n.º 23
0
        private void UpdateReport(TFSSourceControlProvider sourceControlProvider, UpdateReportData updatereport, StreamWriter output, FolderMetaData metadata, int targetRevision)
        {
            output.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
            output.Write("<S:update-report xmlns:S=\"svn:\" xmlns:V=\"http://subversion.tigris.org/xmlns/dav/\" xmlns:D=\"DAV:\" send-all=\"true\">\n");
            output.Write("<S:target-revision rev=\"" + targetRevision + "\"/>\n");

            UpdateReportService updateReportService = new UpdateReportService(this, sourceControlProvider);

            updateReportService.ProcessUpdateReportForDirectory(updatereport, metadata, output, true, false);

            output.Write("</S:update-report>\n");
        }
        private void WriteBcResponse(TFSSourceControlProvider sourceControlProvider,
                                     string requestPath,
                                     string depthHeader,
                                     PropData data,
                                     Stream outputStream)
        {
            int    version        = int.Parse(requestPath.Split('/')[3]);
            string path           = requestPath.Substring(9 + version.ToString().Length);
            bool   setTrunkAsName = false;

            //   if (!sourceControlProvider.ItemExists(Helper.Decode(path), version))
            if (!GetSDKObject().FileExists(Helper.Decode(path), version))
            {
                if (!IsSvnRequestForProjectCreation(path, version, sourceControlProvider))
                {
                    throw new FileNotFoundException();
                }
                path           = "";
                setTrunkAsName = true;
            }

            FolderMetaData folderInfo = GetFolderInfo(sourceControlProvider, depthHeader, path, version, false);

            if (setTrunkAsName)
            {
                folderInfo.Name = "trunk";
            }

            using (StreamWriter writer = new StreamWriter(outputStream))
            {
                writer.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");

                WriteMultiStatusStart(writer, data.Properties);


                if (depthHeader == "1")
                {
                    INode node = new BcFileNode(version, folderInfo, sourceControlProvider);

                    WriteProperties(node, data.Properties, writer, folderInfo.ItemType == ItemType.Folder);
                }

                foreach (ItemMetaData item in folderInfo.Items)
                {
                    INode node = new BcFileNode(version, item, sourceControlProvider);

                    WriteProperties(node, data.Properties, writer, item.ItemType == ItemType.Folder);
                }

                writer.Write("</D:multistatus>\n");
            }
        }
        private static void MakeCollection(string path, TFSSourceControlProvider sourceControlProvider)
        {
            if (!path.StartsWith("//"))
            {
                path = "/" + path;
            }

            Match  match      = Regex.Match(path, @"//!svn/wrk/([a-zA-Z0-9\-]+)/?");
            string folderPath = path.Substring(match.Groups[0].Value.Length - 1);
            string activityId = match.Groups[1].Value;

            sourceControlProvider.MakeCollection(activityId, Helper.Decode(folderPath));
        }
Ejemplo n.º 26
0
        private void RenderFolder(IHttpContext context, TFSSourceControlProvider sourceControlProvider, FolderMetaData folder)
        {
            int           latestVersion = sourceControlProvider.GetLatestVersion();
            IHttpResponse response      = context.Response;

            SetResponseSettings(response, "text/html; charset=UTF-8", Encoding.UTF8, 200);
            response.AppendHeader("Last-Modified", Helper.FormatDateB(folder.LastModifiedDate));
            response.AppendHeader("ETag", "W/\"" + folder.ItemRevision + "//" + Helper.EncodeB(folder.Name) + "\"");
            response.AppendHeader("Accept-Ranges", "bytes");

            using (StreamWriter writer = new StreamWriter(context.Response.OutputStream))
            {
                writer.Write("<html><head><title>");
                writer.Write("Revision " + latestVersion + ": /" + folder.Name);
                writer.Write("</title></head>\n");
                writer.Write("<body>\n");
                writer.Write(" <h2>Revision " + latestVersion + ": /" + folder.Name + "</h2>\n");
                writer.Write(" <ul>\n");
                if (folder.Name != "")
                {
                    writer.Write("  <li><a href=\"../\">..</a></li>\n");
                }
                foreach (ItemMetaData item in folder.Items)
                {
                    string itemName = item.Name;
                    if (itemName.Contains("/"))
                    {
                        itemName = itemName.Substring(itemName.LastIndexOf("/") + 1);
                    }

                    writer.Write("  <li><a href=\"");
                    writer.Write(Helper.Encode(itemName));
                    if (item.ItemType == ItemType.Folder)
                    {
                        writer.Write("/");
                    }
                    writer.Write("\">");
                    writer.Write(Helper.EncodeB(itemName));
                    if (item.ItemType == ItemType.Folder)
                    {
                        writer.Write("/");
                    }
                    writer.Write("</a></li>\n");
                }
                writer.Write(" </ul>\n");
                //writer.Write(" <hr noshade><em>Powered by <a href=\"http://subversion.tigris.org/\">Subversion</a> version 1.4.2 (r22196).</em>\n");
                writer.Write(" <hr noshade><em><a href=\"http://www.dynamsoft.com/\">Dynamsoft</a> powered by <a href=\"http://www.dynamsoft.com\">SvnBridge</a></em>\n");
                writer.Write("</body></html>");
                writer.Flush();
            }
        }
Ejemplo n.º 27
0
        private void SendBlameResponse(IHttpRequest request, IHttpResponse response, TFSSourceControlProvider sourceControlProvider, string serverPath, FileRevsReportData data)
        {
            LogItem log = sourceControlProvider.GetLog(
                serverPath,
                data.StartRevision,
                data.EndRevision,
                Recursion.Full,
                data.EndRevision - data.StartRevision);

            if (log.History.Length == 0)
            {
                WriteFileNotFoundResponse(request, response);
            }

            foreach (SourceItemHistory history in log.History)
            {
                foreach (SourceItemChange change in history.Changes)
                {
                    if (change.Item.ItemType == ItemType.Folder)
                    {
                        SendErrorResponseCannotRunBlameOnFolder(response, serverPath);
                        return;
                    }
                }
            }
            using (var output = new StreamWriter(response.OutputStream))
            {
                response.StatusCode = (int)HttpStatusCode.OK;
                output.Write(
                    @"<?xml version=""1.0"" encoding=""utf-8""?>
<S:file-revs-report xmlns:S=""svn:"" xmlns:D=""DAV:"">");

                foreach (SourceItemHistory history in Helper.SortHistories(true, log.History))
                {
                    foreach (SourceItemChange change in history.Changes)
                    {
                        ItemMetaData items    = sourceControlProvider.GetItems(change.Item.RemoteChangesetId, change.Item.RemoteName, Recursion.None);
                        byte[]       itemData = sourceControlProvider.ReadFile(items);
                        string       txdelta  = SvnDiffParser.GetBase64SvnDiffData(itemData);

                        output.Write(@"<S:file-rev path=""" + change.Item.RemoteName + @""" rev=""" +
                                     change.Item.RemoteChangesetId + @""">
                            <S:rev-prop name=""svn:log"">" + history.Comment + @"</S:rev-prop>
                            <S:rev-prop name=""svn:author"">" + history.Username + @"</S:rev-prop>
                            <S:rev-prop name=""svn:date"">" + Helper.FormatDate(change.Item.RemoteDate) + @"</S:rev-prop>
                            <S:txdelta>" + txdelta + @"</S:txdelta></S:file-rev>");
                    }
                }
                output.Write("</S:file-revs-report>");
            }
        }
Ejemplo n.º 28
0
        private void RenderFile(IHttpContext context, TFSSourceControlProvider sourceControlProvider, ItemMetaData item)
        {
            IHttpResponse response = context.Response;

            SetResponseSettings(response, "text/plain", Encoding.Default, 200);
            response.AppendHeader("Last-Modified", Helper.FormatDateB(item.LastModifiedDate));
            response.AppendHeader("ETag", "\"" + item.ItemRevision + "//" + Helper.EncodeB(item.Name) + "\"");
            response.AppendHeader("Accept-Ranges", "bytes");
            byte[] itemData = sourceControlProvider.ReadFile(item);
            if (itemData.Length > 0) // Write throw exception if zero bytes
            {
                response.OutputStream.Write(itemData, 0, itemData.Length);
            }
        }
        protected override void Handle(IHttpContext context, TFSSourceControlProvider sourceControlProvider)
        {
            IHttpRequest  request  = context.Request;
            IHttpResponse response = context.Response;
            CheckoutData  data     = Helper.DeserializeXml <CheckoutData>(request.InputStream);

            try
            {
                string path     = GetPath(request);
                string location = CheckOut(sourceControlProvider, data, path);
                SetResponseSettings(response, "text/html", Encoding.UTF8, 201);
                response.AppendHeader("Cache-Control", "no-cache");
                string locationUrl = "http://" + request.Headers["Host"] + Helper.EncodeC(location);
                response.AppendHeader("Location", Helper.UrlEncodeIfNeccesary(locationUrl));
                string responseContent =
                    "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n" +
                    "<html><head>\n" +
                    "<title>201 Created</title>\n" +
                    "</head><body>\n" +
                    "<h1>Created</h1>\n" +
                    "<p>Checked-out resource " + Helper.Encode(location, true) + " has been created.</p>\n" +
                    "<hr />\n" +
                    "<address>Apache at " + request.Url.Host + " Port " +
                    request.Url.Port + "</address>\n" +
                    "</body></html>\n";
                WriteToResponse(response, responseContent);
            }
            catch (ConflictException ex)
            {
                RequestCache.Items["RequestBody"] = data;
                DefaultLogger logger = Container.Resolve <DefaultLogger>();
                logger.ErrorFullDetails(ex, context);

                SetResponseSettings(response, "text/xml; charset=\"utf-8\"", Encoding.UTF8, 409);
                string responseContent =
                    "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                    "<D:error xmlns:D=\"DAV:\" xmlns:m=\"http://apache.org/dav/xmlns\" xmlns:C=\"svn:\">\n" +
                    "<C:error/>\n" +
                    "<m:human-readable errcode=\"160024\">\n" +
                    "The version resource does not correspond to the resource within the transaction.  Either the requested version resource is out of date (needs to be updated), or the requested version resource is newer than the transaction root (restart the commit).\n" +
                    "</m:human-readable>\n" +
                    "</D:error>\n";
                WriteToResponse(response, responseContent);
            }
            catch
            {
                RequestCache.Items["RequestBody"] = data;
                throw;
            }
        }
        protected override void Handle(IHttpContext context, TFSSourceControlProvider sourceControlProvider)
        {
            IHttpRequest  request  = context.Request;
            IHttpResponse response = context.Response;

            SetResponseSettings(response, "text/plain", Encoding.UTF8, 204);
            string path = GetPath(request);

            GetSDKObject().Unlock(path);
            Guid   token    = new Guid();
            string strToken = "<opaquelocktoken:" + token + ">";

            response.AppendHeader("Lock-Token", strToken);
            response.AppendHeader("X-SVN-Creation-Date", System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.000000Z"));
        }