python/which/TODO.txt

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 # High Priority
     3 - Figure out the script story on the various platforms. On Windows, look into
     4   the launcher thing that effbot has. Unix, don't install the script my
     5   default. They can always do "python -m which ..." with Python >= 2.4.
     6   Suggest an alias that some folks might want to use for that.
     9 # Medium Priority
    11 - define __all__?
    12 - improve test suite
    13 - test with other versions of Python
    14 - get the PATHEXT attached extension to reflect the actual canonical
    15   case of file matches on Windows, currently the extension from PATHEXT
    16   is always uppercase
    17 - What to do with Change 145624 by shanec. It is a bit of a
    18   bastardization. Maybe allow this with a special option to allow the change
    19   in semantics.
    21     > Change 145624 by shanec@shanec-ocelotl on 2005/05/24 16:51:55
    22     > 
    23     >     make which work better on OSX
    24     >     - add support for searching /Applications and /Network/Applications
    25     >     - add support for .app bundles
    26     > 
    27     > Affected files ...
    28     > 
    29     > ... //depot/main/Apps/Komodo-devel/src/python-sitelib/which.py#7 edit
    30     > 
    31     > Differences ...
    32     > 
    33     > ==== //depot/main/Apps/Komodo-devel/src/python-sitelib/which.py#7 (text) ====
    34     > 
    35     > @@ -126,10 +126,11 @@
    36     >                  sys.stderr.write("duplicate: %s (%s)\n" % potential)
    37     >              return None
    38     >      else:
    39     > -        if not stat.S_ISREG(os.stat(potential[0]).st_mode):
    40     > +        darwinApp = sys.platform == 'darwin' and potential[0][-4:]=='.app'
    41     > +        if not darwinApp and not stat.S_ISREG(os.stat(potential[0]).st_mode):
    42     >              if verbose:
    43     >                  sys.stderr.write("not a regular file: %s (%s)\n" % potential)
    44     > -        elif not os.access(potential[0], os.X_OK):
    45     > +        elif not darwinApp and not os.access(potential[0], os.X_OK):
    46     >              if verbose:
    47     >                  sys.stderr.write("no executable access: %s (%s)\n"\
    48     >                                   % potential)
    49     > @@ -166,6 +167,9 @@
    50     >          path = os.environ.get("PATH", "").split(os.pathsep)
    51     >          if sys.platform.startswith("win"):
    52     >              path.insert(0, os.curdir)  # implied by Windows shell
    53     > +        if sys.platform == 'darwin':
    54     > +            path.insert(0, '/Network/Applications')
    55     > +            path.insert(0, '/Applications')
    56     >      else:
    57     >          usingGivenPath = 1
    58     >  
    59     > @@ -182,6 +186,9 @@
    60     >                  exts = ['.COM', '.EXE', '.BAT']
    61     >          elif not isinstance(exts, list):
    62     >              raise TypeError("'exts' argument must be a list or None")
    63     > +    elif sys.platform == 'darwin':
    64     > +        if exts is None:
    65     > +            exts = ['.app']
    66     >      else:
    67     >          if exts is not None:
    68     >              raise WhichError("'exts' argument is not supported on "\
    69     > @@ -202,7 +209,8 @@
    70     >              for ext in ['']+exts:
    71     >                  absName = os.path.abspath(
    72     >                      os.path.normpath(os.path.join(dirName, command+ext)))
    73     > -                if os.path.isfile(absName):
    74     > +                if os.path.isfile(absName) or (sys.platform == 'darwin' and \
    75     > +                    absName[-4:]=='.app' and os.path.isdir(absName)):
    76     >                      if usingGivenPath:
    77     >                          fromWhere = "from given path element %d" % i
    78     >                      elif not sys.platform.startswith("win"):
    80   Here is a start with slight improvements:
    82     > Index: which.py
    83     > ===================================================================
    84     > --- which.py	(revision 270)
    85     > +++ which.py	(working copy)
    86     > @@ -126,9 +126,18 @@
    87     >                  sys.stderr.write("duplicate: %s (%s)\n" % potential)
    88     >              return None
    89     >      else:
    90     > -        if not stat.S_ISREG(os.stat(potential[0]).st_mode):
    91     > +        st_mode = os.stat(potential[0]).st_mode
    92     > +        isMacAppBundle = sys.platform == "darwin" \
    93     > +                         and potential[0].endswith(".app") \
    94     > +                         and stat.S_ISDIR(st_mode)
    95     > +        if not isMacAppBundle and not stat.S_ISREG(st_mode):
    96     >              if verbose:
    97     > -                sys.stderr.write("not a regular file: %s (%s)\n" % potential)
    98     > +                if sys.platform == "darwin":
    99     > +                    sys.stderr.write("not a regular file or .app bundle: "
   100     > +                                     "%s (%s)\n" % potential)
   101     > +                else:
   102     > +                    sys.stderr.write("not a regular file: %s (%s)\n"
   103     > +                                     % potential)
   104     >          elif not os.access(potential[0], os.X_OK):
   105     >              if verbose:
   106     >                  sys.stderr.write("no executable access: %s (%s)\n"\
   109 # Low Priority
   111 - have a version for pre-generators (i.e. Python 2.1)
   112 - add a "logging" interface

mercurial