"Fossies" - the Fresh Open Source Software Archive

Member "Atom/resources/app/apm/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py" (7 Feb 2017, 1748 Bytes) of archive /windows/misc/atom-windows.zip:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Python source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 #!/usr/bin/env python
    2 # Copyright (c) 2011 Google Inc. All rights reserved.
    3 # Use of this source code is governed by a BSD-style license that can be
    4 # found in the LICENSE file.
    5 
    6 """These functions are executed via gyp-flock-tool when using the Makefile
    7 generator.  Used on systems that don't have a built-in flock."""
    8 
    9 import fcntl
   10 import os
   11 import struct
   12 import subprocess
   13 import sys
   14 
   15 
   16 def main(args):
   17   executor = FlockTool()
   18   executor.Dispatch(args)
   19 
   20 
   21 class FlockTool(object):
   22   """This class emulates the 'flock' command."""
   23   def Dispatch(self, args):
   24     """Dispatches a string command to a method."""
   25     if len(args) < 1:
   26       raise Exception("Not enough arguments")
   27 
   28     method = "Exec%s" % self._CommandifyName(args[0])
   29     getattr(self, method)(*args[1:])
   30 
   31   def _CommandifyName(self, name_string):
   32     """Transforms a tool name like copy-info-plist to CopyInfoPlist"""
   33     return name_string.title().replace('-', '')
   34 
   35   def ExecFlock(self, lockfile, *cmd_list):
   36     """Emulates the most basic behavior of Linux's flock(1)."""
   37     # Rely on exception handling to report errors.
   38     # Note that the stock python on SunOS has a bug
   39     # where fcntl.flock(fd, LOCK_EX) always fails
   40     # with EBADF, that's why we use this F_SETLK
   41     # hack instead.
   42     fd = os.open(lockfile, os.O_WRONLY|os.O_NOCTTY|os.O_CREAT, 0666)
   43     if sys.platform.startswith('aix'):
   44       # Python on AIX is compiled with LARGEFILE support, which changes the
   45       # struct size.
   46       op = struct.pack('hhIllqq', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
   47     else:
   48       op = struct.pack('hhllhhl', fcntl.F_WRLCK, 0, 0, 0, 0, 0, 0)
   49     fcntl.fcntl(fd, fcntl.F_SETLK, op)
   50     return subprocess.call(cmd_list)
   51 
   52 
   53 if __name__ == '__main__':
   54   sys.exit(main(sys.argv[1:]))