示例#1
0
        private ArrayList getUnpublishedFiles(String path)
        {
            this.Cursor = Cursors.WaitCursor;

            if (scan == false)
            {
                int trimIndex = path.IndexOf("art");
                path = path.Substring(trimIndex, path.Length - trimIndex);
                path = "//depot/phoenix/xbox/published/" + path.Replace("\\", "/");
            }

            p4 = new P4Connection();
            p4.Connect();
            p4I = new P4Interface();

            ArrayList unpublished = new ArrayList();

            String[]    args   = { "-n", "-d", "-i", "-t", "-v", "-b", "phx_published", path };
            P4RecordSet record = p4I.Run("integrate", args);

            foreach (P4Record entry in record)
            {
                unpublished.Add(entry.Fields["fromFile"]);
            }
            this.Cursor = Cursors.Default;
            return(unpublished);

            p4.Disconnect();
        }
示例#2
0
        //-----------------------------------------------------------------------------------------
        // create connection
        //
        public bool connect()
        {
            try
            {
                m_connection.Connect();
                try
                {
                    m_connection.Login(m_config.Password);

                    if (ClientIsValid())
                    {
                        m_connected = true;
                        return(true);
                    }
                }
                catch {}

                if (Authentification())
                {
                    m_connected = true;
                    return(true);
                }
            }
            catch (System.Exception ex)
            {
                m_error = ex.ToString();
            }

            try { m_connection.Disconnect(); } catch { }
            return(false);
        }
示例#3
0
        public void Test003_AddFiles()
        {
            p4.Disconnect();
            p4.Charset = "utf16le-bom";
            p4.Connect();

            string testPath = Path.Combine(p4ClientRootDirectory, "TestUnicode");

            //Create some test files
            Directory.CreateDirectory(testPath);

            P4PendingChangelist cl = p4.CreatePendingChangelist("TestUnicode");

            string[] args = new string[13];
            args[0] = "-c";
            args[1] = cl.Number.ToString();
            args[2] = "-tunicode";

            for (int i = 0; i < 10; i++)
            {
                string       fn       = string.Format("File{0}", i);
                string       contents = string.Format("this is file: {0}\nEn español.\nΚαλημέρα κόσμε\nこんにちは 世界", i);
                StreamWriter sw       = new StreamWriter(Path.Combine(testPath, fn), false, System.Text.Encoding.Unicode);
                sw.Write(contents);
                sw.Close();

                args[i + 3] = Path.Combine(testPath, fn);
            }
            P4UnParsedRecordSet r = p4.RunUnParsed("add", args);

            Assert.AreEqual(r.Messages.Length, 10, "Invalid response from p4 add");
            for (int i = 0; i < 10; i++)
            {
                Assert.AreEqual(string.Format("//depot/TestUnicode/File{0}#1 - opened for add", i), r.Messages[i], "Invalid response from p4 add");
            }

            r = cl.Submit();
            Assert.AreEqual("Submitting change 8.", r.Messages[0], "Unexpected output from p4 submit");
        }
示例#4
0
        public void Test001_SetupConnection()
        {
            p4                = new P4Connection();
            p4.Port           = _port;
            p4.CallingProgram = "P4.Net Test Harness";
            p4.CallingVersion = "1.0";
            p4.Connect();

            p4.Client = "TestClient1";
            p4.User   = "******";

            P4Record s = p4.Run("info")[0];

            Assert.AreEqual(s["userName"], "TestUser1", "User name should be known.  This test requires StandardTest to be executed first");
            Assert.AreEqual(s["clientName"], "TestClient1", "Client spec should be known.  This test requires StandardTest to be executed first");
        }
示例#5
0
        /// <summary>
        /// Connect to Perforce if not already connected.
        /// </summary>
        /// <exception cref="System.ArgumentException">Thrown when null or empty P4Options.Port, or when P4Options.Client is invalid</exception>
        /// <exception cref="P4API.Exceptions.PerforceInitializationError">Thrown P4Options.Port is invalid</exception>
        public void Connect()
        {
            if (IsConnected)
            {
                return;
            }

            try
            {
                // .Api must be set before the call to Connect()
                _p4.Api = 65; // 2009.1, to support P4 Move. See http://kb.perforce.com/article/512/perforce-protocol-levels

                _p4.Connect();
            }
            catch (P4API.Exceptions.PerforceInitializationError)
            {
                Log.Error(String.Format(Resources.Unable_To_Connect, _p4.Port, _p4.Client));
                IsConnected = false;
                throw;
            }

            // There seems to be a problem in P4.Net IsValidConnection() -- the login check always succeeds.
            IsConnected = _p4.IsValidConnection(true, true);
            if (!IsConnected)
            {
                Log.Error(String.Format(Resources.Unable_To_Connect, _p4.Port, _p4.Client));
                throw new ArgumentException("Not a valid workspace.");
            }

            P4Form client;

            try
            {
                client = _p4.Fetch_Form("client");
            }
            catch (Exception ex)
            {
                Log.Error("Unable to fetch client form.\n" + ex.Message);
                return;
            }

            var root = client["Root"];

            _map.SetRoot(root);
        }
示例#6
0
文件: Program.cs 项目: mh52/P4.net
 /// <summary>
 /// </summary>
 public static int Main(string[] args)
 {
     using (var c = new P4Connection())
     {
         try
         {
             c.Connect();
         }
         catch (Exception ex)
         {
             Console.ForegroundColor = ConsoleColor.Red;
             Console.Write(ex.GetType().FullName);
             Console.Write(": ");
             Console.WriteLine(ex.Message);
             Console.WriteLine(ex.StackTrace);
             Console.ResetColor();
         }
     }
     return(0);
 }
示例#7
0
文件: Program.cs 项目: mh52/P4.net
 /// <summary>
 /// </summary>
 public static int Main(string[] args)
 {
     using (var c = new P4Connection())
     {
         try
         {
             c.Connect();
         }
         catch (Exception ex)
         {
             Console.ForegroundColor = ConsoleColor.Red;
             Console.Write(ex.GetType().FullName);
             Console.Write(": ");
             Console.WriteLine(ex.Message);
             Console.WriteLine(ex.StackTrace);
             Console.ResetColor();
         }
     }
     return 0;
 }
示例#8
0
        private static string executeP4Cmd(string cmd, string [] args)
        {
            string results = "";

            try
            {
                P4Connection p4 = new P4Connection();
                p4.Connect();

                P4RecordSet recSet = p4.Run(cmd, args);

                foreach (object obj in recSet.Messages)
                {
                    results += String.Format("{0}\r\n", (string)obj);
                }

                foreach (P4Record rec in recSet)
                {
                    FieldDictionary fd = rec.Fields;
                    if (cmd.Equals("opened"))
                    {
                        results += fd["clientFile"];
                    }
                    else
                    {
                        foreach (string key in fd.Keys)
                        {
                            results += String.Format("{0}\t\t{1}\r\n", key, fd[key]);
                        }
                    }
                    results += "\r\n";
                }
                p4.Disconnect();
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
            return(results);
        }
示例#9
0
        public Form1()
        {
            InitializeComponent();


            appSettings = new Settings("data.dat");

            p4 = new P4Connection();
            p4.ExceptionLevel = P4ExceptionLevels.ExceptionOnBothErrorsAndWarnings;
            p4.Connect();

            if (!p4.IsValidConnection(true, true))
            {
                MessageBox.Show("No valid p4 connection.");
            }

            p4I = new P4Interface();
            p4I.Connect();

            if (!p4I.IsValidConnection())
            {
                MessageBox.Show("No valid p4I connection.");
            }

            checkedNodes = new ArrayList();

            foreach (String user in p4I.GetUsers())
            {
                comboBoxUsers.Items.Add(user.ToLower());
            }
            comboBoxUsers.SelectedItem = p4.User.ToLower().ToString();

            BuildLocalPaths();
            MarkUnpublishedFolders(getUnpublishedFiles());
            ExpandNode(treeView1.Nodes[0]);

            p4.Disconnect();
        }
示例#10
0
        protected void InitP4()
        {
            _p4 = new P4Connection();
            if (_p4Port != null)
            {
                _p4.Port = _p4Port;
            }
            if (_p4Client != null)
            {
                _p4.Client = _p4Client;
            }
            if (_p4CWD != null)
            {
                _p4.CWD = _p4CWD;
            }
            if (_p4Host != null)
            {
                _p4.Host = _p4Host;
            }
            if (_p4User != null)
            {
                _p4.User = _p4User;
            }
            if (_p4Passwd != null)
            {
                _p4.Password = _p4Passwd;
            }

            _p4.ExceptionLevel = P4ExceptionLevels.NoExceptionOnErrors;
            _p4.CallingProgram = "P4MSBuildTasks";
            _p4.CallingVersion = "1.0";

            _p4.Connect();
            if (_useLogin && _p4Passwd != null)
            {
                _p4.Login(_p4Passwd);
            }
        }
示例#11
0
        private ArrayList getUnpublishedFiles()
        {
            this.Cursor = Cursors.WaitCursor;
            Scanning scan = new Scanning();

            scan.StartPosition = FormStartPosition.CenterParent;
            scan.Show();
            scan.Refresh();

            p4 = new P4Connection();
            p4.Connect();
            p4I = new P4Interface();

            ArrayList unpublished = new ArrayList();

            String[] args = { "-n", "-d", "-i", "-t", "-v", "-b", "phx_published", "//depot/phoenix/xbox/published/..." };

            // logging
            String tmp = "";

            foreach (String t in args)
            {
                tmp += t;
                tmp += " ";
            }
            LogLine(String.Concat("Running: Integrate ", tmp));

            P4RecordSet record = p4I.Run("integrate", args);

            LogLine(String.Concat("Total Records: ", record.Records.Length));
            foreach (P4Record entry in record)
            {
                if (checkBoxFilter.Checked)
                {
                    String file      = entry.Fields["depotFile"];
                    String delim     = "/";
                    int    trimIndex = -1;
                    if (file.Split(delim.ToCharArray())[6] == "art")
                    {
                        trimIndex = file.IndexOf("art");
                    }
                    else if (file.Split(delim.ToCharArray())[6] == "scenario")
                    {
                        trimIndex = file.IndexOf("scenario");
                    }

                    file = file.Substring(trimIndex, file.Length - trimIndex);
                    file = "//depot/phoenix/xbox/published/" + file.Replace("\\", "/");

                    String[]    args2   = { file.Replace("//depot/phoenix/xbox/published", localPath).Replace("\\", "/") };
                    P4RecordSet changes = p4I.Run("changes", args2);

                    if (changes.Records.Length > 0 && changes[0].Fields["user"] == comboBoxUsers.SelectedItem.ToString())
                    {
                        LogLine(String.Concat("Record: ", entry.Fields["depotFile"]));
                        unpublished.Add(entry.Fields["fromFile"]);
                    }
                }
                else
                {
                    unpublished.Add(entry.Fields["fromFile"]);
                }
            }
            scan.Close();
            this.Cursor = Cursors.Default;
            return(unpublished);

            p4.Disconnect();
        }
示例#12
0
        public void ProcessRequest(HttpContext context)
        {
            // Don't allow this response to be cached by the browser.
            context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            context.Response.Cache.SetNoStore();
            context.Response.Cache.SetExpires(DateTime.MinValue);

            // Create a new p4 connection, and set the appropriate properties
            P4Connection      p4          = new P4Connection();
            AppSettingsReader appSettings = new AppSettingsReader();

            p4.Port     = (string)appSettings.GetValue("P4PORT", typeof(string));
            p4.User     = (string)appSettings.GetValue("P4USER", typeof(string));
            p4.Client   = (string)appSettings.GetValue("P4CLIENT", typeof(string));
            p4.Password = (string)appSettings.GetValue("P4PASSWD", typeof(string));

            try
            {
                p4.Connect();

                //Figure out the clientPath for the file
                string clientPath = string.Format("//{0}/{1}", p4.Client, context.Request.AppRelativeCurrentExecutionFilePath.Substring(2));

                if (!clientPath.EndsWith("/"))
                {
                    // We have a path to a file

                    // find the MIME type and set it
                    string ext      = Path.GetExtension(clientPath);
                    string mimeType = getMimeType(ext);
                    context.Response.ContentType = mimeType;

                    //stream the results ... will throw an exception if the path isn't found
                    try
                    {
                        p4.PrintStream(context.Response.OutputStream, clientPath);
                        context.Response.OutputStream.Flush();
                    }
                    catch (P4API.Exceptions.FileNotFound)
                    {
                        context.Response.StatusCode = 404;
                    }
                }
                else
                {
                    // we have a directory... let's look for a default "index" file and redirect

                    // My Rule for a default page is:
                    // :: "index.htm" or "index.html" in the current directory (case insensitive)
                    //
                    // I don't rely on the Perforce server to be case insensitive, so I will run an fstat for
                    // all files in the directory and see if there are any "index.htm*" files
                    P4RecordSet rs = p4.Run("fstat", "-Op", clientPath + "*");
                    foreach (P4Record r in rs)
                    {
                        if (r["depotFile"].ToLower().EndsWith("index.html") || r["depotFile"].ToLower().EndsWith("index.htm"))
                        {
                            // the -Op switch means client file will be //<clientname>/<clientpath>
                            clientPath = r["clientFile"];
                            break;
                        }
                    }
                    if (clientPath.EndsWith("/"))
                    {
                        // clientPath not updated, means we can't find a default page

                        // For now, just 404... in the future we could allow directory browsing
                        // (which we be a lot bigger than a sample application ;-)
                        context.Response.StatusCode = 404;
                    }
                    else
                    {
                        // redirect to the index page
                        string redirect = "~" + clientPath.Substring(p4.Client.Length + 2);
                        context.Response.Redirect(redirect, false);
                    }
                }
            }
            catch (Exception e)
            {
                // unhandled exception... send a 500 to the browser
                System.Diagnostics.Trace.WriteLine(e.StackTrace);
                context.Response.StatusCode = 500;
            }
            finally
            {
                p4.Disconnect();
                context.Response.End();
            }
        }
示例#13
0
        //Guts of the logic.  This is where the app will dynamicaly build the job labels
        public void RunLabeler(EventLog log)
        {
            P4Connection p4 = null;

            try
            {
                p4      = new P4Connection();
                p4.Port = _p4port;
                p4.User = _p4user;
                if (!_useLogin)
                {
                    p4.Password = _p4password;
                }
                p4.Connect();
                if (_useLogin)
                {
                    p4.Login(_p4password);
                }

                // Don't throw an exception on a Perforce error.  We handle these manually.
                p4.ExceptionLevel = P4ExceptionLevels.NoExceptionOnErrors;

                //Use unparsed b/c older server versions do not support
                //parsed output for the counter command.  And, it's easy
                //to parse by hand.
                P4UnParsedRecordSet counter = p4.RunUnParsed("counter", _p4counter);

                int           counterValue       = int.Parse(counter[0]);
                int           LastSequenceNumber = 0;
                List <string> JobList            = new List <string>();

                //Run p4 logger to find all the changes and jobs since the last run
                P4RecordSet loggers = p4.Run("logger", "-c", counterValue.ToString());

                //spin the results, and get a unique list of jobs
                foreach (P4Record r in loggers)
                {
                    if (r.Fields["key"] == "job")
                    {
                        string JobName = r.Fields["attr"];
                        if (!JobList.Contains(JobName))
                        {
                            JobList.Add(JobName);
                        }
                    }
                    LastSequenceNumber = int.Parse(r.Fields["sequence"]);
                }

                // We're done with loggers, so lets remove the reference and
                // give the GC a chance to clean memory.  If it's been a long time
                // since the last run, it could be thousands of jobs to catch up.
                loggers = null;

                // Now spin all the jobs and build the label
                foreach (string JobName in JobList)
                {
                    BuildLabel(JobName, p4, log);
                }

                //Now we update the counter to the last sequence number from logger.
                p4.RunUnParsed("counter", _p4counter, LastSequenceNumber.ToString());
            }
            catch (Exception e)
            {
                // rethrow... b/c I'm lazy :-)
                throw e;
            }
            finally
            {
                // All done here... time to disconnect.
                p4.Disconnect();
            }
        }