mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-24 22:34:59 +00:00
Added --attribute-author/committer options #698
This commit is contained in:
parent
8c5c2d27a4
commit
c207c7839a
4 changed files with 60 additions and 19 deletions
|
@ -344,6 +344,18 @@ def get_parser(default_config_files, git_root):
|
||||||
default=True,
|
default=True,
|
||||||
help="Enable/disable commits when repo is found dirty (default: True)",
|
help="Enable/disable commits when repo is found dirty (default: True)",
|
||||||
)
|
)
|
||||||
|
group.add_argument(
|
||||||
|
"--attribute-author",
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
default=True,
|
||||||
|
help="Attribute aider code changes in the git author name (default: True)",
|
||||||
|
)
|
||||||
|
group.add_argument(
|
||||||
|
"--attribute-committer",
|
||||||
|
action=argparse.BooleanOptionalAction,
|
||||||
|
default=True,
|
||||||
|
help="Attribute aider commits in the git committer name (default: True)",
|
||||||
|
)
|
||||||
group.add_argument(
|
group.add_argument(
|
||||||
"--dry-run",
|
"--dry-run",
|
||||||
action=argparse.BooleanOptionalAction,
|
action=argparse.BooleanOptionalAction,
|
||||||
|
|
|
@ -218,6 +218,8 @@ class Coder:
|
||||||
auto_test=False,
|
auto_test=False,
|
||||||
lint_cmds=None,
|
lint_cmds=None,
|
||||||
test_cmd=None,
|
test_cmd=None,
|
||||||
|
attribute_author=True,
|
||||||
|
attribute_committer=True,
|
||||||
):
|
):
|
||||||
if not fnames:
|
if not fnames:
|
||||||
fnames = []
|
fnames = []
|
||||||
|
@ -275,6 +277,8 @@ class Coder:
|
||||||
git_dname,
|
git_dname,
|
||||||
aider_ignore_file,
|
aider_ignore_file,
|
||||||
models=main_model.commit_message_models(),
|
models=main_model.commit_message_models(),
|
||||||
|
attribute_author=attribute_author,
|
||||||
|
attribute_committer=attribute_committer,
|
||||||
)
|
)
|
||||||
self.root = self.repo.root
|
self.root = self.repo.root
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
|
|
|
@ -212,6 +212,7 @@ def parse_lint_cmds(lint_cmds, io):
|
||||||
return
|
return
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
def generate_search_path_list(default_fname, git_root, command_line_file):
|
def generate_search_path_list(default_fname, git_root, command_line_file):
|
||||||
files = []
|
files = []
|
||||||
default_file = Path(default_fname)
|
default_file = Path(default_fname)
|
||||||
|
@ -223,12 +224,15 @@ def generate_search_path_list(default_fname, git_root, command_line_file):
|
||||||
files.append(default_file.resolve())
|
files.append(default_file.resolve())
|
||||||
files = list(map(str, files))
|
files = list(map(str, files))
|
||||||
files = list(dict.fromkeys(files))
|
files = list(dict.fromkeys(files))
|
||||||
|
|
||||||
return files
|
return files
|
||||||
|
|
||||||
|
|
||||||
def register_models(git_root, model_settings_fname, io):
|
def register_models(git_root, model_settings_fname, io):
|
||||||
model_settings_files = generate_search_path_list(".aider.models.yml", git_root, model_settings_fname)
|
model_settings_files = generate_search_path_list(
|
||||||
|
".aider.models.yml", git_root, model_settings_fname
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
files_loaded = models.register_models(model_settings_files)
|
files_loaded = models.register_models(model_settings_files)
|
||||||
if len(files_loaded) > 0:
|
if len(files_loaded) > 0:
|
||||||
|
@ -238,11 +242,14 @@ def register_models(git_root, model_settings_fname, io):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
io.tool_error(f"Error loading aider model settings: {e}")
|
io.tool_error(f"Error loading aider model settings: {e}")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def register_litellm_models(git_root, model_metadata_fname, io):
|
def register_litellm_models(git_root, model_metadata_fname, io):
|
||||||
model_metatdata_files = generate_search_path_list(".aider.litellm.models.json", git_root, model_metadata_fname)
|
model_metatdata_files = generate_search_path_list(
|
||||||
|
".aider.litellm.models.json", git_root, model_metadata_fname
|
||||||
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
model_metadata_files_loaded = models.register_litellm_models(model_metatdata_files)
|
model_metadata_files_loaded = models.register_litellm_models(model_metatdata_files)
|
||||||
|
@ -253,7 +260,8 @@ def register_litellm_models(git_root, model_metadata_fname, io):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
io.tool_error(f"Error loading litellm models: {e}")
|
io.tool_error(f"Error loading litellm models: {e}")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
def main(argv=None, input=None, output=None, force_git_root=None, return_coder=False):
|
def main(argv=None, input=None, output=None, force_git_root=None, return_coder=False):
|
||||||
if argv is None:
|
if argv is None:
|
||||||
argv = sys.argv[1:]
|
argv = sys.argv[1:]
|
||||||
|
@ -393,7 +401,7 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
|
||||||
|
|
||||||
register_models(git_root, args.model_settings_file, io)
|
register_models(git_root, args.model_settings_file, io)
|
||||||
register_litellm_models(git_root, args.model_metadata_file, io)
|
register_litellm_models(git_root, args.model_metadata_file, io)
|
||||||
|
|
||||||
main_model = models.Model(args.model, weak_model=args.weak_model)
|
main_model = models.Model(args.model, weak_model=args.weak_model)
|
||||||
|
|
||||||
lint_cmds = parse_lint_cmds(args.lint_cmd, io)
|
lint_cmds = parse_lint_cmds(args.lint_cmd, io)
|
||||||
|
@ -430,6 +438,8 @@ def main(argv=None, input=None, output=None, force_git_root=None, return_coder=F
|
||||||
auto_test=args.auto_test,
|
auto_test=args.auto_test,
|
||||||
lint_cmds=lint_cmds,
|
lint_cmds=lint_cmds,
|
||||||
test_cmd=args.test_cmd,
|
test_cmd=args.test_cmd,
|
||||||
|
attribute_author=args.attribute_author,
|
||||||
|
attribute_committer=args.attribute_committer,
|
||||||
)
|
)
|
||||||
|
|
||||||
except ValueError as err:
|
except ValueError as err:
|
||||||
|
|
|
@ -16,10 +16,22 @@ class GitRepo:
|
||||||
aider_ignore_spec = None
|
aider_ignore_spec = None
|
||||||
aider_ignore_ts = 0
|
aider_ignore_ts = 0
|
||||||
|
|
||||||
def __init__(self, io, fnames, git_dname, aider_ignore_file=None, models=None):
|
def __init__(
|
||||||
|
self,
|
||||||
|
io,
|
||||||
|
fnames,
|
||||||
|
git_dname,
|
||||||
|
aider_ignore_file=None,
|
||||||
|
models=None,
|
||||||
|
attribute_author=True,
|
||||||
|
attribute_committer=True,
|
||||||
|
):
|
||||||
self.io = io
|
self.io = io
|
||||||
self.models = models
|
self.models = models
|
||||||
|
|
||||||
|
self.attribute_author = attribute_author
|
||||||
|
self.attribute_committer = attribute_committer
|
||||||
|
|
||||||
if git_dname:
|
if git_dname:
|
||||||
check_fnames = [git_dname]
|
check_fnames = [git_dname]
|
||||||
elif fnames:
|
elif fnames:
|
||||||
|
@ -90,11 +102,12 @@ class GitRepo:
|
||||||
|
|
||||||
original_user_name = self.repo.config_reader().get_value("user", "name")
|
original_user_name = self.repo.config_reader().get_value("user", "name")
|
||||||
original_committer_name_env = os.environ.get("GIT_COMMITTER_NAME")
|
original_committer_name_env = os.environ.get("GIT_COMMITTER_NAME")
|
||||||
|
|
||||||
committer_name = f"{original_user_name} (aider)"
|
committer_name = f"{original_user_name} (aider)"
|
||||||
os.environ["GIT_COMMITTER_NAME"] = committer_name
|
|
||||||
|
|
||||||
if aider_edits:
|
if self.attribute_committer:
|
||||||
|
os.environ["GIT_COMMITTER_NAME"] = committer_name
|
||||||
|
|
||||||
|
if aider_edits and self.attribute_author:
|
||||||
original_auther_name_env = os.environ.get("GIT_AUTHOR_NAME")
|
original_auther_name_env = os.environ.get("GIT_AUTHOR_NAME")
|
||||||
os.environ["GIT_AUTHOR_NAME"] = committer_name
|
os.environ["GIT_AUTHOR_NAME"] = committer_name
|
||||||
|
|
||||||
|
@ -102,18 +115,20 @@ class GitRepo:
|
||||||
commit_hash = self.repo.head.commit.hexsha[:7]
|
commit_hash = self.repo.head.commit.hexsha[:7]
|
||||||
self.io.tool_output(f"Commit {commit_hash} {commit_message}")
|
self.io.tool_output(f"Commit {commit_hash} {commit_message}")
|
||||||
|
|
||||||
# Restore the original GIT_COMMITTER_NAME
|
# Restore the env
|
||||||
if aider_edits:
|
|
||||||
|
if self.attribute_committer:
|
||||||
|
if original_committer_name_env is not None:
|
||||||
|
os.environ["GIT_COMMITTER_NAME"] = original_committer_name_env
|
||||||
|
else:
|
||||||
|
del os.environ["GIT_COMMITTER_NAME"]
|
||||||
|
|
||||||
|
if aider_edits and self.attribute_author:
|
||||||
if original_auther_name_env is not None:
|
if original_auther_name_env is not None:
|
||||||
os.environ["GIT_AUTHOR_NAME"] = original_auther_name_env
|
os.environ["GIT_AUTHOR_NAME"] = original_auther_name_env
|
||||||
else:
|
else:
|
||||||
del os.environ["GIT_AUTHOR_NAME"]
|
del os.environ["GIT_AUTHOR_NAME"]
|
||||||
|
|
||||||
if original_committer_name_env is not None:
|
|
||||||
os.environ["GIT_COMMITTER_NAME"] = original_committer_name_env
|
|
||||||
else:
|
|
||||||
del os.environ["GIT_COMMITTER_NAME"]
|
|
||||||
|
|
||||||
return commit_hash, commit_message
|
return commit_hash, commit_message
|
||||||
|
|
||||||
def get_rel_repo_dir(self):
|
def get_rel_repo_dir(self):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue