def testpathancestors(self):
     self.assertEqual(["dir"],
                      [p for p in llmanifest.path_ancestors("dir")])
     self.assertEqual(["dir/sub", "dir"],
                      [p for p in llmanifest.path_ancestors("dir/sub")])
     self.assertEqual(["dir/sub", "dir"],
                      [p for p in llmanifest.path_ancestors("dir/sub/")])
     self.assertEqual(["dir/sub/two", "dir/sub", "dir"],
                      [p for p in llmanifest.path_ancestors("dir/sub/two")])
    def nsi_file_commands(self, install=True):
        def wpath(path):
            if path.endswith('/') or path.endswith(os.path.sep):
                path = path[:-1]
            path = path.replace('/', '\\')
            return path

        result = ""
        dest_files = [
            pair[1] for pair in self.file_list
            if pair[0] and os.path.isfile(pair[1])
        ]
        # sort deepest hierarchy first
        dest_files.sort(lambda a, b: cmp(a.count(os.path.sep),
                                         b.count(os.path.sep)) or cmp(a, b))
        dest_files.reverse()
        out_path = None
        for pkg_file in dest_files:
            rel_file = os.path.normpath(
                pkg_file.replace(self.get_dst_prefix() + os.path.sep, ''))
            installed_dir = wpath(
                os.path.join('$INSTDIR', os.path.dirname(rel_file)))
            pkg_file = wpath(os.path.normpath(pkg_file))
            if installed_dir != out_path:
                if install:
                    out_path = installed_dir
                    result += 'SetOutPath ' + out_path + '\n'
            if install:
                result += 'File ' + pkg_file + '\n'
            else:
                result += 'Delete ' + wpath(os.path.join('$INSTDIR',
                                                         rel_file)) + '\n'
        # at the end of a delete, just rmdir all the directories
        if not install:
            deleted_file_dirs = [
                os.path.dirname(pair[1].replace(
                    self.get_dst_prefix() + os.path.sep, ''))
                for pair in self.file_list
            ]
            # find all ancestors so that we don't skip any dirs that happened to have no non-dir children
            deleted_dirs = []
            for d in deleted_file_dirs:
                deleted_dirs.extend(path_ancestors(d))
            # sort deepest hierarchy first
            deleted_dirs.sort(lambda a, b: cmp(a.count(
                os.path.sep), b.count(os.path.sep)) or cmp(a, b))
            deleted_dirs.reverse()
            prev = None
            for d in deleted_dirs:
                if d != prev:  # skip duplicates
                    result += 'RMDir ' + wpath(
                        os.path.join('$INSTDIR', os.path.normpath(d))) + '\n'
                prev = d

        return result
    def nsi_file_commands(self, install=True):
        def wpath(path):
            if path.endswith("/") or path.endswith(os.path.sep):
                path = path[:-1]
            path = path.replace("/", "\\")
            return path

        result = ""
        dest_files = [pair[1] for pair in self.file_list if pair[0] and os.path.isfile(pair[1])]
        # sort deepest hierarchy first
        dest_files.sort(lambda a, b: cmp(a.count(os.path.sep), b.count(os.path.sep)) or cmp(a, b))
        dest_files.reverse()
        out_path = None
        for pkg_file in dest_files:
            rel_file = os.path.normpath(pkg_file.replace(self.get_dst_prefix() + os.path.sep, ""))
            installed_dir = wpath(os.path.join("$INSTDIR", os.path.dirname(rel_file)))
            pkg_file = wpath(os.path.normpath(pkg_file))
            if installed_dir != out_path:
                if install:
                    out_path = installed_dir
                    result += "SetOutPath " + out_path + "\n"
            if install:
                result += "File " + pkg_file + "\n"
            else:
                result += "Delete " + wpath(os.path.join("$INSTDIR", rel_file)) + "\n"
        # at the end of a delete, just rmdir all the directories
        if not install:
            deleted_file_dirs = [
                os.path.dirname(pair[1].replace(self.get_dst_prefix() + os.path.sep, "")) for pair in self.file_list
            ]
            # find all ancestors so that we don't skip any dirs that happened to have no non-dir children
            deleted_dirs = []
            for d in deleted_file_dirs:
                deleted_dirs.extend(path_ancestors(d))
            # sort deepest hierarchy first
            deleted_dirs.sort(lambda a, b: cmp(a.count(os.path.sep), b.count(os.path.sep)) or cmp(a, b))
            deleted_dirs.reverse()
            prev = None
            for d in deleted_dirs:
                if d != prev:  # skip duplicates
                    result += "RMDir " + wpath(os.path.join("$INSTDIR", os.path.normpath(d))) + "\n"
                prev = d

        return result
 def testpathancestors(self):
     self.assertEqual(["dir"], [p for p in llmanifest.path_ancestors("dir")])
     self.assertEqual(["dir/sub", "dir"], [p for p in llmanifest.path_ancestors("dir/sub")])
     self.assertEqual(["dir/sub", "dir"], [p for p in llmanifest.path_ancestors("dir/sub/")])
     self.assertEqual(["dir/sub/two", "dir/sub", "dir"], [p for p in llmanifest.path_ancestors("dir/sub/two")])