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()]))
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)
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
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