Merge branch 'pw/git-p4-on-cygwin'
authorJunio C Hamano <gitster@pobox.com>
Mon, 4 Feb 2013 18:25:30 +0000 (4 10:25 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 4 Feb 2013 18:25:30 +0000 (4 10:25 -0800)
Improve "git p4" on Cygwin.

* pw/git-p4-on-cygwin: (21 commits)
  git p4: introduce gitConfigBool
  git p4: avoid shell when calling git config
  git p4: avoid shell when invoking git config --get-all
  git p4: avoid shell when invoking git rev-list
  git p4: avoid shell when mapping users
  git p4: disable read-only attribute before deleting
  git p4 test: use test_chmod for cygwin
  git p4: cygwin p4 client does not mark read-only
  git p4 test: avoid wildcard * in windows
  git p4 test: use LineEnd unix in windows tests too
  git p4 test: newline handling
  git p4: scrub crlf for utf16 files on windows
  git p4: remove unreachable windows \r\n conversion code
  git p4 test: translate windows paths for cygwin
  git p4 test: start p4d inside its db dir
  git p4 test: use client_view in t9806
  git p4 test: avoid loop in client_view
  git p4 test: use client_view to build the initial client
  git p4: generate better error message for bad depot path
  git p4: remove unused imports
  ...

1  2 
git-p4.py
t/t9802-git-p4-filetype.sh

diff --cc git-p4.py
+++ b/git-p4.py
@@@ -13,26 -12,17 +12,32 @@@ if sys.hexversion < 0x02040000
      # The limiter is the subprocess module
      sys.stderr.write("git-p4: requires Python 2.4 or later.\n")
      sys.exit(1)
- import optparse, os, marshal, subprocess, shelve
- import tempfile, getopt, os.path, time, platform
- import re, shutil
+ import os
+ import optparse
+ import marshal
+ import subprocess
+ import tempfile
+ import time
+ import platform
+ import re
+ import shutil
+ import stat
  
 +try:
 +    from subprocess import CalledProcessError
 +except ImportError:
 +    # from python2.7:subprocess.py
 +    # Exception classes used by this module.
 +    class CalledProcessError(Exception):
 +        """This exception is raised when a process run by check_call() returns
 +        a non-zero exit status.  The exit status will be stored in the
 +        returncode attribute."""
 +        def __init__(self, returncode, cmd):
 +            self.returncode = returncode
 +            self.cmd = cmd
 +        def __str__(self):
 +            return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
 +
  verbose = False
  
  # Only labels/tags matching this will be imported/exported
@@@ -181,10 -169,24 +186,26 @@@ def p4_system(cmd)
      """Specifically invoke p4 as the system command. """
      real_cmd = p4_build_cmd(cmd)
      expand = isinstance(real_cmd, basestring)
 -    subprocess.check_call(real_cmd, shell=expand)
 +    retcode = subprocess.call(real_cmd, shell=expand)
 +    if retcode:
 +        raise CalledProcessError(retcode, real_cmd)
  
+ _p4_version_string = None
+ def p4_version_string():
+     """Read the version string, showing just the last line, which
+        hopefully is the interesting version bit.
+        $ p4 -V
+        Perforce - The Fast Software Configuration Management System.
+        Copyright 1995-2011 Perforce Software.  All rights reserved.
+        Rev. P4/NTX86/2011.1/393975 (2011/12/16).
+     """
+     global _p4_version_string
+     if not _p4_version_string:
+         a = p4_read_pipe_lines(["-V"])
+         _p4_version_string = a[-1].rstrip()
+     return _p4_version_string
  def p4_integrate(src, dest):
      p4_system(["integrate", "-Dt", wildcard_encode(src), wildcard_encode(dest)])
  
Simple merge