def write_recipe_state_file_update(recipe_dir, file_recipe_path):
        kitchen_meta_dir = DKKitchenDisk.find_kitchen_meta_dir(recipe_dir)
        if kitchen_meta_dir is None:
            print "Unable to find kitchen meta directory in '%s'" % recipe_dir
            return False
        recipes_meta_dir = DKKitchenDisk.get_recipes_meta_dir(kitchen_meta_dir)
        if recipes_meta_dir is None:
            print "Unable to find recipes meta directory in '%s'" % recipe_dir
            return False

        _, recipe_name = os.path.split(recipe_dir)
        recipe_meta_dir = os.path.join(recipes_meta_dir, recipe_name)
        recipe_sha_file = os.path.join(recipe_meta_dir, FILE_SHA)

        contents = DKFileUtils.read_file(recipe_sha_file)
        new_contents = ''
        for line in contents.split('\n'):
            if line.startswith(
                    os.path.join(recipe_name, file_recipe_path) + ':'):
                full_file_path = os.path.join(recipe_dir, file_recipe_path)
                the_sha = DKRecipeDisk.get_sha(full_file_path)
                the_path = os.path.join(recipe_name, file_recipe_path)
                new_contents += '%s:%s\n' % (the_path, the_sha)
            else:
                new_contents += '%s\n' % line
        new_contents = new_contents.strip('\n')
        DKFileUtils.write_file(recipe_sha_file, new_contents)
    def get_changed_files(start_dir, recipe_name):

        kitchen_meta_dir = DKKitchenDisk.find_kitchen_meta_dir(start_dir)
        if kitchen_meta_dir is None:
            print "Unable to find kitchen meta directory in '%s'" % start_dir
            return False, None, None, None
        recipes_meta_dir = DKKitchenDisk.get_recipes_meta_dir(kitchen_meta_dir)
        if recipes_meta_dir is None:
            print "Unable to find recipes meta directory in '%s'" % start_dir
            return False, None, None, None

        recipe_meta_dir = os.path.join(recipes_meta_dir, recipe_name)

        current_shas = DKRecipeDisk.fetch_shas(start_dir)

        saved_shas = DKRecipeDisk.load_saved_shas(recipe_meta_dir)

        if not saved_shas:
            return False, None, None, None

        current_paths = set(current_shas.keys())
        saved_paths = set(saved_shas.keys())

        common_paths = saved_paths & current_paths

        new_paths = current_paths - saved_paths
        removed_paths = saved_paths - current_paths

        changed_paths = [
            path for path in common_paths
            if current_shas[path] != saved_shas[path]
        ]

        return True, new_paths, changed_paths, removed_paths
    def find_recipe_meta_dir(check_dir=None):
        recipe_root_dir = DKRecipeDisk.find_recipe_root_dir(check_dir)
        if recipe_root_dir is None:
            return None

        recipe_name = DKRecipeDisk.find_recipe_name(recipe_root_dir)
        if recipe_name is None:
            return None

        kitchen_meta_dir = DKKitchenDisk.find_kitchen_meta_dir(recipe_root_dir)
        if kitchen_meta_dir is None:
            print "Unable to find kitchen meta directory in '%s'" % check_dir
            return False

        recipes_meta_dir = DKKitchenDisk.get_recipes_meta_dir(kitchen_meta_dir)
        if recipes_meta_dir is None:
            print "Unable to find recipes meta directory in '%s'" % check_dir
            return False

        recipe_meta_dir = os.path.join(recipes_meta_dir, recipe_name)
        return recipe_meta_dir
    def write_recipe_state(recipe_dir):

        kitchen_meta_dir = DKKitchenDisk.find_kitchen_meta_dir(recipe_dir)
        if kitchen_meta_dir is None:
            print "Unable to find kitchen meta directory in '%s'" % recipe_dir
            return False
        recipes_meta_dir = DKKitchenDisk.get_recipes_meta_dir(kitchen_meta_dir)
        if recipes_meta_dir is None:
            print "Unable to find recipes meta directory in '%s'" % recipe_dir
            return False

        _, recipe_name = os.path.split(recipe_dir)

        recipe_meta_dir = os.path.join(recipes_meta_dir, recipe_name)

        shas = DKRecipeDisk.fetch_shas(recipe_dir)

        recipe_sha_file = os.path.join(recipe_meta_dir, FILE_SHA)

        with open(recipe_sha_file, 'w') as f:
            f.write('\n'.join(['%s:%s' % item for item in shas.items()]))
예제 #5
0
    def find_recipe_meta_dir(check_dir=None):
        recipe_root_dir = DKRecipeDisk.find_recipe_root_dir(check_dir)
        if recipe_root_dir is None:
            return None

        recipe_name = DKRecipeDisk.find_recipe_name(recipe_root_dir)
        if recipe_name is None:
            return None

        kitchen_meta_dir = DKKitchenDisk.find_kitchen_meta_dir(recipe_root_dir)
        if kitchen_meta_dir is None:
            print "Unable to find kitchen meta directory in '%s'" % check_dir
            return False

        recipes_meta_dir = DKKitchenDisk.get_recipes_meta_dir(kitchen_meta_dir)
        if recipes_meta_dir is None:
            print "Unable to find recipes meta directory in '%s'" % check_dir
            return False

        recipe_meta_dir = os.path.join(recipes_meta_dir, recipe_name)
        return recipe_meta_dir
    def _find_recipe(walk_dir=None, return_recipe_root_path=False):

        if walk_dir is None:
            walk_dir = os.getcwd()

        kitchen_meta_dir = DKKitchenDisk.find_kitchen_meta_dir(walk_dir)
        if kitchen_meta_dir is None:
            # We aren't in a kitchen folder.
            return None

        kitchen_root_dir = DKKitchenDisk.find_kitchen_root_dir(walk_dir)
        if kitchen_root_dir is None:
            # We aren't in a kitchen folder.
            return None

        if walk_dir == kitchen_root_dir or walk_dir == kitchen_meta_dir:
            # We are in the kitchen root folder. Can't do anything here.
            return None

        current_dir_abs = os.path.abspath(walk_dir)
        kitchen_root_dir_abs = os.path.abspath(kitchen_root_dir)

        common = os.path.commonprefix([current_dir_abs, kitchen_root_dir_abs])
        current_dir_relative = current_dir_abs.replace(common + os.sep, '')
        parts = current_dir_relative.split(os.sep)
        if len(parts) == 0:
            # Looks like we are in the kitchen folder.
            return None

        recipe_name = parts[0]
        recipe_meta_contents = DKRecipeDisk._get_my_recipe_meta(
            kitchen_meta_dir, recipe_name)
        if recipe_name == recipe_meta_contents:
            if not return_recipe_root_path:
                return recipe_name
            else:
                return os.path.join(kitchen_root_dir, recipe_name)
        else:
            return None
    def write_recipe_state_file_add(recipe_dir, file_recipe_path):
        kitchen_meta_dir = DKKitchenDisk.find_kitchen_meta_dir(recipe_dir)
        if kitchen_meta_dir is None:
            print "Unable to find kitchen meta directory in '%s'" % recipe_dir
            return False
        recipes_meta_dir = DKKitchenDisk.get_recipes_meta_dir(kitchen_meta_dir)
        if recipes_meta_dir is None:
            print "Unable to find recipes meta directory in '%s'" % recipe_dir
            return False

        _, recipe_name = os.path.split(recipe_dir)
        recipe_meta_dir = os.path.join(recipes_meta_dir, recipe_name)
        recipe_sha_file = os.path.join(recipe_meta_dir, FILE_SHA)

        contents = DKFileUtils.read_file(recipe_sha_file)
        the_path = os.path.join(recipe_name, file_recipe_path)
        full_file_path = os.path.join(recipe_dir, file_recipe_path)
        the_sha = DKRecipeDisk.get_sha(full_file_path)
        new_line = '\n%s:%s' % (the_path, the_sha)
        contents += new_line
        new_contents = contents.strip('\n')
        DKFileUtils.write_file(recipe_sha_file, new_contents)
예제 #8
0
    def _find_recipe(walk_dir=None, return_recipe_root_path=False):

        if walk_dir is None:
            walk_dir = os.getcwd()

        kitchen_meta_dir = DKKitchenDisk.find_kitchen_meta_dir(walk_dir)
        if kitchen_meta_dir is None:
            # We aren't in a kitchen folder.
            return None

        kitchen_root_dir = DKKitchenDisk.find_kitchen_root_dir(walk_dir)
        if kitchen_root_dir is None:
            # We aren't in a kitchen folder.
            return None

        if walk_dir == kitchen_root_dir or walk_dir == kitchen_meta_dir:
            # We are in the kitchen root folder. Can't do anything here.
            return None

        current_dir_abs = os.path.abspath(walk_dir)
        kitchen_root_dir_abs = os.path.abspath(kitchen_root_dir)

        common = os.path.commonprefix([current_dir_abs, kitchen_root_dir_abs])
        current_dir_relative = current_dir_abs.replace(common + os.sep, '')
        parts = current_dir_relative.split(os.sep)
        if len(parts) == 0:
            # Looks like we are in the kitchen folder.
            return None

        recipe_name = parts[0]
        recipe_meta_contents = DKRecipeDisk._get_my_recipe_meta(kitchen_meta_dir, recipe_name)
        if recipe_name == recipe_meta_contents:
            if not return_recipe_root_path:
                return recipe_name
            else:
                return os.path.join(kitchen_root_dir, recipe_name)
        else:
            return None
    def write_recipe_meta(self, start_dir):
        if not DKKitchenDisk.is_kitchen_root_dir(start_dir):
            print "'%s' is not a Kitchen directory" % start_dir
            return False

        kitchen_meta_dir = DKKitchenDisk.find_kitchen_meta_dir(start_dir)
        if kitchen_meta_dir is None:
            print "Unable to find kitchen meta directory in '%s'" % start_dir
            return False
        recipes_meta_dir = DKKitchenDisk.get_recipes_meta_dir(kitchen_meta_dir)
        if recipes_meta_dir is None:
            print "Unable to find recipes meta directory in '%s'" % start_dir
            return False

        recipe_meta_dir = os.path.join(recipes_meta_dir, self._recipe_name)
        if not os.path.isdir(recipe_meta_dir):
            try:
                os.makedirs(recipe_meta_dir)
            except OSError as e:
                print "%s - %s - %s" % (e.filename, e.errno, e.message)
                return False
        recipes_meta_file = os.path.join(recipe_meta_dir, RECIPE_META)
        try:
            with open(recipes_meta_file, 'w') as f:
                f.write(self._recipe_name)
        except OSError as e:
            print "%s - %s - %s" % (e.filename, e.errno, e.message)
            return False

        orig_head_file = os.path.join(recipe_meta_dir, ORIG_HEAD)
        try:
            with open(orig_head_file, 'w') as f:
                f.write(self._recipe_sha)
        except OSError as e:
            print "%s - %s - %s" % (e.filename, e.errno, e.message)
            return False
        return True
예제 #10
0
    def write_recipe_meta(self, start_dir):
        if not DKKitchenDisk.is_kitchen_root_dir(start_dir):
            print "'%s' is not a Kitchen directory" % start_dir
            return False

        kitchen_meta_dir = DKKitchenDisk.find_kitchen_meta_dir(start_dir)
        if kitchen_meta_dir is None:
            print "Unable to find kitchen meta directory in '%s'" % start_dir
            return False
        recipes_meta_dir = DKKitchenDisk.get_recipes_meta_dir(kitchen_meta_dir)
        if recipes_meta_dir is None:
            print "Unable to find recipes meta directory in '%s'" % start_dir
            return False

        recipe_meta_dir = os.path.join(recipes_meta_dir, self._recipe_name)
        if not os.path.isdir(recipe_meta_dir):
            try:
                os.makedirs(recipe_meta_dir)
            except OSError as e:
                print "%s - %s - %s" % (e.filename, e.errno, e.message)
                return False
        recipes_meta_file = os.path.join(recipe_meta_dir, RECIPE_META)
        try:
            with open(recipes_meta_file, 'w') as f:
                f.write(self._recipe_name)
        except OSError as e:
            print "%s - %s - %s" % (e.filename, e.errno, e.message)
            return False

        orig_head_file = os.path.join(recipe_meta_dir, ORIG_HEAD)
        try:
            with open(orig_head_file, 'w') as f:
                f.write(self._recipe_sha)
        except OSError as e:
            print "%s - %s - %s" % (e.filename, e.errno, e.message)
            return False
        return True