docs: def untar_file(filename, location):
      """Untar the file (tar file located at filename) to the destination location"""
      if not os.path.exists(location):
          os.makedirs(location)
      if filename.lower().endswith('.gz') or filename.lower().endswith('.tgz'):
          mode = 'r:gz'
      elif filename.lower().endswith('.bz2') or filename.lower().endswith('.tbz'):
          mode = 'r:bz2'
      elif filename.lower().endswith('.tar'):
          mode = 'r'
      else:
          logger.warn('Cannot determine compression type for file %s' % filename)
          mode = 'r:*'
      tar = tarfile.open(filename, mode)
      try:
          # note: python<=2.5 doesnt seem to know about pax headers, filter them
          leading = has_leading_dir([
              member.name for member in tar.getmembers()
              if member.name != 'pax_global_header'
          ])
          for member in tar.getmembers():
              fn = member.name
              if fn == 'pax_global_header':
                  continue
              if leading:
                  fn = split_leading_dir(fn)[1]
              path = os.path.join(location, fn)
              if member.isdir():
                  if not os.path.exists(path):
                      os.makedirs(path)
              else:
                  try:
                      fp = tar.extractfile(member)
                  except (KeyError, AttributeError):
                      e = sys.exc_info()[1]
                      # Some corrupt tar files seem to produce this
                      # (specifically bad symlinks)
                      logger.warn(
                          'In the tar file %s the member %s is invalid: %s'
                          % (filename, member.name, e))
                      continue
                  if not os.path.exists(os.path.dirname(path)):
                      os.makedirs(os.path.dirname(path))
                  destfp = open(path, 'wb')
                  try:
                      shutil.copyfileobj(fp, destfp)
                  finally:
                      destfp.close()
                  fp.close()
      finally:
          tar.close()