text: """convert a list of args to a cmd; copied from subprocess"""
  # info: this replaces the _get_str() used previously by mlpatches
  
  from six import string_types
  
  
  def list2cmdline(seq):
      """
      Translate a sequence of arguments into a command line
      string, using the same rules as the MS C runtime:
  
      1) Arguments are delimited by white space, which is either a
         space or a tab.
  
      2) A string surrounded by double quotation marks is
         interpreted as a single argument, regardless of white space
         contained within.  A quoted string can be embedded in an
         argument.
  
      3) A double quotation mark preceded by a backslash is
         interpreted as a literal double quotation mark.
  
      4) Backslashes are interpreted literally, unless they
         immediately precede a double quotation mark.
  
      5) If backslashes immediately precede a double quotation mark,
         every pair of backslashes is interpreted as a literal
         backslash.  If the number of backslashes is odd, the last
         backslash escapes the next double quotation mark as
         described in rule 3.
      """
  
      # See
      # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
      # or search http://msdn.microsoft.com for
      # "Parsing C++ Command-Line Arguments"
      if isinstance(seq, string_types):
          return seq
      result = []
      needquote = False
      for arg in seq:
          bs_buf = []
  
          # Add a space to separate this argument from the others
          if result:
              result.append(' ')
  
          needquote = (" " in arg) or ("\t" in arg) or not arg
          if needquote:
              result.append('"')
  
          for c in arg:
              if c == '\\':
                  # Don't know if we need to double yet.
                  bs_buf.append(c)
              elif c == '"':
                  # Double backslashes.
                  result.append('\\' * len(bs_buf)*2)
                  bs_buf = []
                  result.append('\\"')
              else:
                  # Normal char
                  if bs_buf:
                      result.extend(bs_buf)
                      bs_buf = []
                  result.append(c)
  
          # Add remaining backslashes, if any.
          if bs_buf:
              result.extend(bs_buf)
  
          if needquote:
              result.extend(bs_buf)
              result.append('"')
  
      return ''.join(result)
  
  _get_str = list2cmdline
  