我正在訪問多個mercurial存儲庫,並根據主機名稱,我想配置每個人出現的名稱和電子郵件地址。hgrc中的mercurial多個用戶名
顯而易見的解決方案是將'用戶名'添加到每個repo的hgrc文件的ui部分,但我不想依賴這個,因爲這些沙箱會不時被刪除。
因此,我需要一箇中心位置,我可以將所有這些放在一起。我最好喜歡一個解決方案,我可以將主機名映射到用戶特定的hgrc文件(〜/ .hgrc)中的用戶名。
這可能嗎?
問候,
[編輯] 是,@禮物cyon的回答做這項工作。我剛剛更新它來處理'ssh:// user @'類型的url,並且在clone命令中沒有目標文件夾時也可以應付。
def merc_host_to_username_mapper(**kwargs):
host_to_username_map={'bitbucket.org' : 'your name <[email protected]>'}
hg_pats = kwargs['pats']
merc_url = hg_pats[0]
merc_path_list = merc_url.split('://', 1)
if len(merc_path_list) == 1:
#print('ret1')
return
merc_sub_path = merc_path_list[-1].split('@',1)[-1]
while True:
#print('sub_path: ', merc_sub_path)
if merc_sub_path in host_to_username_map:
#print('found path, breaking')
break
else:
if len(merc_sub_path.rsplit('/', 1)) == 1:
#print('ret2')
return
else:
merc_sub_path = merc_sub_path.rsplit('/', 1)[0]
if len(hg_pats) is 1:
for folder in reversed(hg_pats[0].split('/')):
if folder:
hg_pats.append(folder)
#print('breaking ',folder)
break
if len(hg_pats) is 1:
#print('ret3')
return
#print('hg_pats: ', hg_pats)
with open(hg_pats[1] + "/.hg/hgrc", "a") as hgrc:
print("adding username \'" + host_to_username_map[merc_sub_path] + '\' to hgrc');
hgrc.write("[ui]\n");
hgrc.write("username=" + host_to_username_map[merc_sub_path] + "\n");