Factory for obtaining VssDatabase instances.
Beispiel #1
0
        private void DumpUsers()
        {
            var df = new VssDatabaseFactory(vssDirTextBox.Text);
            var db = df.Open();
            var path = vssProjectTextBox.Text;
            VssProject project;
            try
            {
                project = db.GetItem(path) as VssProject;
            }
            catch (VssPathException ex)
            {
                MessageBox.Show(ex.Message, "Invalid project path",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (project == null)
            {
                MessageBox.Show(path + " is not a project", "Invalid project path",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            var emailDictionary = ReadDictionaryFile("e-mail dictionary", db.BasePath, "emails.properties");

            revisionAnalyzer = new RevisionAnalyzer(workQueue, logger, db);
            if (!string.IsNullOrEmpty(excludeTextBox.Text))
            {
                revisionAnalyzer.ExcludeFiles = excludeTextBox.Text;
            }
            revisionAnalyzer.AddItem(project);
            workQueue.AddLast(delegate (object work)
            {
                foreach (var dateEntry in revisionAnalyzer.SortedRevisions)
                {
                    foreach (Revision revision in dateEntry.Value)
                    {
                        var user = revision.User.ToLower();
                        if (emailDictionary.ContainsKey(user))
                            continue;
                        emailDictionary.Add(user, "");
                    }
                }
                string propsPath = db.BasePath + Path.DirectorySeparatorChar + "emails.properties";
                WriteDictionaryFile(emailDictionary, propsPath);
                MessageBox.Show("The list of usernames is written to:\n\n"
                    + propsPath + "\n\n"
                    + "Please edit it and fill in email addresses in the form:\n\n"
                    + "username = Full Name <e-mail>\n\nor\n\nusername = e-mail", "User-email mapping",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
            });
        }
Beispiel #2
0
        private void goButton_Click(object sender, EventArgs e)
        {
            try
            {
                OpenLog(logTextBox.Text);

                logger.WriteLine("VSS2Git version {0}", Assembly.GetExecutingAssembly().GetName().Version);

                WriteSettings();

                Encoding encoding = Encoding.Default;
                EncodingInfo encodingInfo;
                if (codePages.TryGetValue(encodingComboBox.SelectedIndex, out encodingInfo))
                {
                    encoding = encodingInfo.GetEncoding();
                }

                logger.WriteLine("VSS encoding: {0} (CP: {1}, IANA: {2})",
                    encoding.EncodingName, encoding.CodePage, encoding.WebName);
                logger.WriteLine("Comment transcoding: {0}",
                    transcodeCheckBox.Checked ? "enabled" : "disabled");

                var df = new VssDatabaseFactory(vssDirTextBox.Text);
                df.Encoding = encoding;
                var db = df.Open();

                var path = vssProjectTextBox.Text;
                VssItem item;
                try
                {
                    item = db.GetItem(path);
                }
                catch (VssPathException ex)
                {
                    MessageBox.Show(ex.Message, "Invalid project path",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                var project = item as VssProject;
                if (project == null)
                {
                    MessageBox.Show(path + " is not a project", "Invalid project path",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

                revisionAnalyzer = new RevisionAnalyzer(workQueue, logger, db);
                if (!string.IsNullOrEmpty(excludeTextBox.Text))
                {
                    revisionAnalyzer.ExcludeFiles = excludeTextBox.Text;
                }
                revisionAnalyzer.AddItem(project);

                changesetBuilder = new ChangesetBuilder(workQueue, logger, revisionAnalyzer);
                changesetBuilder.AnyCommentThreshold = TimeSpan.FromSeconds((double) anyCommentUpDown.Value);
                changesetBuilder.SameCommentThreshold = TimeSpan.FromSeconds((double) sameCommentUpDown.Value);
                changesetBuilder.BuildChangesets();

                if (!string.IsNullOrEmpty(outDirTextBox.Text))
                {
                    var gitExporter = new GitExporter(workQueue, logger,
                        revisionAnalyzer, changesetBuilder);
                    if (!string.IsNullOrEmpty(domainTextBox.Text))
                    {
                        gitExporter.EmailDomain = domainTextBox.Text;
                    }
                    if (!transcodeCheckBox.Checked)
                    {
                        gitExporter.CommitEncoding = encoding;
                    }
                    gitExporter.ExportToGit(outDirTextBox.Text);
                }

                workQueue.Idle += delegate
                {
                    logger.Dispose();
                    logger = Logger.Null;
                };

                statusTimer.Enabled = true;
                goButton.Enabled = false;
            }
            catch (Exception ex)
            {
                ShowException(ex);

                CloseLog();
            }
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.Default;

            var invalidArg = false;
            var listRevisions = false;
            var argIndex = 0;
            while (!invalidArg && argIndex < args.Length && args[argIndex].StartsWith("--"))
            {
                var option = args[argIndex].Substring(2).Split(':');
                switch (option[0])
                {
                    case "revisions":
                        {
                            listRevisions = true;
                            break;
                        }

                    case "encoding":
                        {
                            string encodingName;
                            if (option.Length > 1)
                            {
                                encodingName = option[1];
                            }
                            else if (argIndex + 1 < args.Length)
                            {
                                encodingName = args[++argIndex];
                            }
                            else
                            {
                                invalidArg = true;
                                goto InvalidArg;
                            }

                            Encoding encoding;
                            try
                            {
                                int codePage;
                                if (int.TryParse(encodingName, out codePage))
                                {
                                    encoding = Encoding.GetEncoding(codePage);
                                }
                                else
                                {
                                    encoding = Encoding.GetEncoding(encodingName);
                                }
                            }
                            catch
                            {
                                Console.WriteLine("Invalid encoding: {0}", encodingName);
                                invalidArg = true;
                                goto InvalidArg;
                            }

                            Console.OutputEncoding = encoding;
                            break;
                        }

                    case "encodings":
                        {
                            var encodings = Encoding.GetEncodings();
                            Console.WriteLine("{0,-6} {1,-25} {2}", "CP", "IANA", "Description");
                            foreach (var encoding in encodings)
                            {
                                var codePage = encoding.CodePage;
                                switch (codePage)
                                {
                                    case 1200:
                                    case 1201:
                                    case 12000:
                                    case 12001:
                                        // UTF-16 and 32 are managed-only
                                        continue;
                                }
                                Console.WriteLine("{0,-6} {1,-25} {2}", codePage, encoding.Name, encoding.DisplayName);
                            }
                            return;
                        }

                    default:
                        {
                            invalidArg = true;
                            break;
                        }
                }
                ++argIndex;
            }

            InvalidArg:
            if (invalidArg || argIndex >= args.Length)
            {
                Console.WriteLine("Syntax: VssDump [options] <vss-base-path>");
                Console.WriteLine("Options:");
                Console.WriteLine("  --encoding:<encoding>    Output encoding IANA name or code page");
                Console.WriteLine("  --encodings              List supported encodings and terminate");
                Console.WriteLine("  --revisions              Include file revision information");
                return;
            }

            var repoPath = args[argIndex];
            var df = new VssDatabaseFactory(repoPath);
            var db = df.Open();

            Console.WriteLine("File hierarchy:");
            Console.WriteLine(Separator);
            var tree = new TreeDumper(Console.Out) { IncludeRevisions = false };
            tree.IncludeRevisions = listRevisions;
            tree.DumpProject(db.RootProject);
            Console.WriteLine();

            Console.WriteLine("Log file contents:");
            for (char c = 'a'; c <= 'z'; ++c)
            {
                string[] dataPaths = Directory.GetFiles(
                    Path.Combine(db.DataPath, c.ToString()), "*.");
                foreach (string dataPath in dataPaths)
                {
                    var dataFile = Path.GetFileName(dataPath).ToUpper();
                    if (Type.GetType("Mono.Runtime") != null)
                    {
                        dataFile = dataFile.ToLower();
                    }
                    var orphaned = !tree.PhysicalNames.Contains(dataFile);
                    Console.WriteLine(Separator);
                    Console.WriteLine("{0}{1}", dataPath, orphaned ? " (orphaned)" : "");
                    DumpLogFile(dataPath);
                }
            }
            Console.WriteLine();

            Console.WriteLine("Name file contents:");
            Console.WriteLine(Separator);
            var namePath = Path.Combine(db.DataPath, "names.dat");
            DumpNameFile(namePath);
            Console.WriteLine();

            Console.WriteLine(Separator);
            Console.WriteLine("Project actions: {0}", FormatCollection(projectActions));
            Console.WriteLine("File actions: {0}", FormatCollection(fileActions));
        }