private static byte[] GetPreviousRevision(GitFileStatusTracker tracker, string fileName)
        {
            byte[] cachedBytes = tracker.GetFileContent(fileName);
            if (cachedBytes == null)
                return cachedBytes;

            if (Environment.NewLine != "\r\n")
                return cachedBytes;

            WorkingTreeOptions options = tracker.Repository.GetConfig().Get(WorkingTreeOptions.KEY);
            if (options.GetAutoCRLF() != CoreConfig.AutoCRLF.TRUE)
                return cachedBytes;

            int lines = 0;
            for (int i = 0; i < cachedBytes.Length; i++)
            {
                if (cachedBytes[i] == '\n' && (i == 0 || cachedBytes[i - 1] != '\r'))
                    lines++;
            }

            byte[] result = new byte[cachedBytes.Length + lines];
            for (int i = 0, j = 0; i < cachedBytes.Length; i++)
            {
                byte current = cachedBytes[i];
                if (current == '\n' && (i == 0 || cachedBytes[i - 1] != '\r'))
                    result[j++] = (byte)'\r';

                result[j++] = current;
            }

            return result;
        }
        public void GetFileContentTestNegative()
        {
            GitFileStatusTracker tracker = new GitFileStatusTracker(tempFolder);
            var fileContent = tracker.GetFileContent(tempFile + ".bad");

            Assert.IsNull(fileContent);

            GitFileStatusTracker.Init(tempFolder);

            File.WriteAllLines(tempFile, lines);
            tracker     = new GitFileStatusTracker(tempFolder);
            fileContent = tracker.GetFileContent(tempFile + ".bad");
            Assert.IsNull(fileContent);

            tracker.StageFile(tempFile);
            fileContent = tracker.GetFileContent(tempFile + ".bad");
            Assert.IsNull(fileContent);

            tracker.Commit("中文 1čtestč");

            fileContent = tracker.GetFileContent(tempFile + ".bad");
            Assert.IsNull(fileContent);
        }
예제 #3
0
        private static byte[] GetPreviousRevision(GitFileStatusTracker tracker, string fileName)
        {
            byte[] cachedBytes = tracker.GetFileContent(fileName);
            if (cachedBytes == null)
            {
                return(cachedBytes);
            }

            if (Environment.NewLine != "\r\n")
            {
                return(cachedBytes);
            }

            WorkingTreeOptions options = tracker.Repository.GetConfig().Get(WorkingTreeOptions.KEY);

            if (options.GetAutoCRLF() != CoreConfig.AutoCRLF.TRUE)
            {
                return(cachedBytes);
            }

            int lines = 0;

            for (int i = 0; i < cachedBytes.Length; i++)
            {
                if (cachedBytes[i] == '\n' && (i == 0 || cachedBytes[i - 1] != '\r'))
                {
                    lines++;
                }
            }

            byte[] result = new byte[cachedBytes.Length + lines];
            for (int i = 0, j = 0; i < cachedBytes.Length; i++)
            {
                byte current = cachedBytes[i];
                if (current == '\n' && (i == 0 || cachedBytes[i - 1] != '\r'))
                {
                    result[j++] = (byte)'\r';
                }

                result[j++] = current;
            }

            return(result);
        }
        public void GetFileContentTest()
        {
            GitFileStatusTracker.Init(tempFolder);
            File.WriteAllLines(tempFile, lines);

            GitFileStatusTracker tracker = new GitFileStatusTracker(tempFolder);

            tracker.StageFile(tempFile);
            tracker.Commit("中文 1čtestč");

            var fileContent = tracker.GetFileContent(tempFile);

            using (var binWriter = new BinaryWriter(File.Open(tempFile + ".bk", System.IO.FileMode.Create)))
            {
                binWriter.Write(fileContent);
            }

            var newlines = File.ReadAllLines(tempFile + ".bk");

            Assert.AreEqual(lines[0], newlines[0]);
            Assert.AreEqual(lines[1], newlines[1]);
            Assert.AreEqual(lines[2], newlines[2]);
        }