2015-03-18 85 views
3

我正在訪問多個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"); 

回答

1

你可以使用一個post-clone鉤自動「用戶名」每個回購的hgrc的UI seciton的增加。

這個鉤子然後會給你一個地方,以保持從回購到用戶名的集中映射。

的代碼看起來是這樣的:

〜/ .hgrc:

[hooks] 
post-clone=python:/path/to/script/name_chooser.py:chooser 

name_chooser.py:

def chooser(**kwargs): 
    map={'https://bitbucket.org/yourrepo' : 'your_user'} 
    hg_pats = kwargs['pats'] 
    if hg_pats[0] not in map: 
     return 
    with open(hg_pats[1] + "/.hg/hgrc", "a") as hgrc: 
     hgrc.write("[ui]\n"); 
     hgrc.write("username=" + map[hg_pats[0]] + "\n"); 

kwargs['pats']是的參數傳遞給hg clone命令列表。在這段代碼中,我假設你像這樣調用克隆:

hg clone https://bitbucket.org/yourrepo local_repo_path

相關問題