【发布时间】:2014-06-25 16:20:57
【问题描述】:
我明白了
NameError: global name 'git' is not defined
为git.add(log_filename)。我不明白为什么repo = Repo(ABSOLUTE_PATH) 和git = repo.git 在original_function = function(ABSOLUTE_PATH, GIT_WORKING_DIR, log_name, remove_logs) 之前被调用。 git 对象不应该对被调用函数可用吗?
我想在这种情况下使用装饰器,因为一个单独的函数将使用类似的功能。我怎样才能使这个装饰器工作?
def raw_git(function):
@wraps(function)
def wrapper(ABSOLUTE_PATH, GIT_WORKING_DIR,
log_name=None, remove_logs=None):
try:
repo = Repo(ABSOLUTE_PATH)
git = repo.git
except NoSuchPathError:
raise Exception("Error in finding local git path!")
original_function = function(ABSOLUTE_PATH, GIT_WORKING_DIR,
log_name, remove_logs)
return original_function
return wrapper
@raw_git
def git_add_log(ABSOLUTE_PATH, GIT_WORKING_DIR,
log_name=None, remove_logs=None):
log_name = GIT_WORKING_DIR + "/" + log_name
try:
git.add(log_filename)
git.commit(message="Removing oldest logs")
git.push()
except GitCommandError:
raise Exception("There was an error with git command "
"for removing oldest log(s)")
【问题讨论】:
标签: python decorator python-decorators