Как я могу создавать патчи между ревизиями для каждого файла? - PullRequest
1 голос
/ 23 июня 2009

У меня есть хранилище Subversion, и в нем 8 ревизий со многими, многими изменениями между 7 и 8. Как я могу создать файлы патчей для каждого файла, для изменений между 7 и 8?

I.E., Не один массивный файл патча, но если x.php изменился и y.php изменился, я бы хотел файл патча для x.php и y.php

Возможно ли это? Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 23 июня 2009

вам понадобится какой-то сценарий, чтобы либо получить список имен файлов и запросить патч для каждого, либо запросить «массивный» патч и разбить его на --- строк ...

0 голосов
/ 23 июня 2009

Это простое приложение winforms, которое разделит его, сделано в C #. Для этого нужны три кнопки: btnIn, btnFolder, btnSplit и две метки, lblIn, lblFolder.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PatchSplitter {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }

        private void btnIn_Click(object sender, EventArgs e) {
            OpenFileDialog ofd = new OpenFileDialog();

            if(ofd.ShowDialog() == DialogResult.OK) {
                lblIn.Text = ofd.FileName;
                if(lblIn.Text != "" && lblFolder.Text != "") {
                    btnSplit.Enabled = true;
                } else {
                    btnSplit.Enabled = false;
                }
            }
        }

        private void btnFolder_Click(object sender, EventArgs e) {
            FolderBrowserDialog fbd = new FolderBrowserDialog();

            if(fbd.ShowDialog() == DialogResult.OK) {
                lblFolder.Text = fbd.SelectedPath;
                if (lblIn.Text != "" && lblFolder.Text != "") {
                    btnSplit.Enabled = true;
                } else {
                    btnSplit.Enabled = false;
                }
            }
        }

        private void btnSplit_Click(object sender, EventArgs e) {
            string file = "";
            string line;
            StreamWriter current = null;

            StreamReader input = new StreamReader(lblIn.Text);
            while ((line = input.ReadLine()) != null) {
                if (line.StartsWith("Index: ")) {
                    if (current != null) {
                        current.Close();
                    }
                    file = line.Remove(0, 7);
                    string directory;
                    if (file.LastIndexOf('/') == -1) {
                        directory = "";
                    } else {
                        directory = file.Substring(0, file.LastIndexOf('/'));
                    }
                    if (!Directory.Exists(lblFolder.Text + "\\" + directory)) {
                        Directory.CreateDirectory(lblFolder.Text + "\\" + directory);
                    }
                    current = new StreamWriter(new FileStream(lblFolder.Text + "\\" + file + ".patch", FileMode.Create));
                    current.WriteLine(line);
                } else {
                    if (current != null) {
                        current.WriteLine(line);
                    }
                }
            }
            current.Close();
            MessageBox.Show("Done");
        }
    }
}
0 голосов
/ 23 июня 2009

Я знаю, что это возможно с такими инструментами, как InstallShield. InstallShield выясняет, в чем ваши различия между двумя версиями, и записывает установщик патча, содержащий только различия. Таким образом, кажется, что это свойство вашего инструмента создания установщика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...