def __add_new_file_and_link (self, file_name, parent_id, commit_id, file_path): dbfile = DBFile (None, file_name) dbfile.repository_id = self.repo_id self.cursor.execute (statement (DBFile.__insert__, self.db.place_holder), (dbfile.id, dbfile.file_name, dbfile.repository_id)) dblink = DBFileLink (None, parent_id, dbfile.id, file_path) dblink.commit_id = commit_id self.cursor.execute (statement (DBFileLink.__insert__, self.db.place_holder), (dblink.id, dblink.parent, dblink.child, dblink.commit_id, dblink.file_path)) return dbfile.id
def __action_rename(self, path, prefix, log, action, dbaction): """Process a renamed file""" new_parent_path = os.path.dirname(path) new_file_name = os.path.basename(path) from_commit_id = self.revision_cache.get(action.rev, None) if action.branch_f2: branch_f2_id = self.__get_branch(action.branch_f2) old_path = "%d://%s" % (branch_f2_id, action.f2) else: old_path = prefix + action.f2 file_id, parent_id = self.__get_file_for_path(old_path, from_commit_id, True) dbfilecopy = DBFileCopy(None, file_id) dbfilecopy.action_id = dbaction.id dbfilecopy.from_commit = from_commit_id if not new_parent_path or new_parent_path == prefix.strip('/'): new_parent_id = -1 else: new_parent_id = self.__get_file_for_path(new_parent_path, log.id)[0] if new_parent_id != parent_id: # It's not a simple rename, but a move operation # we have to write down the new link parent_id = new_parent_id dblink = DBFileLink(None, parent_id, file_id) dblink.commit_id = log.id self.cursor.execute(statement(DBFileLink.__insert__, self.db.place_holder), (dblink.id, dblink.parent, dblink.child, dblink.commit_id)) self.moves_cache[path] = old_path self.file_cache[path] = (file_id, parent_id) # Move/rename is a special case of copy. # There's not a # new file_id dbfilecopy.from_id = file_id dbfilecopy.new_file_name = new_file_name self.__add_new_copy(dbfilecopy) # Save also file_path self.__add_file_path(log.id, file_id, path) return file_id