hg notify inter-repo mechanics

John Turner jjturner at energi.com
Mon Jan 5 14:06:06 UTC 2015


On Sun, 04 Jan 2015 15:35:34 -0500, Simon King <simon at simonking.org.uk>  
wrote:

>
>> On 4 Jan 2015, at 01:28, John Turner <jjturner at energi.com> wrote:
>>
>> On Sat, 03 Jan 2015 09:20:57 -0500, Mads Kiilerich <mads at kiilerich.com>  
>> wrote:
>>
>>> On 01/02/2015 07:31 PM, John Turner wrote:
>>>> On Thu, 01 Jan 2015 13:40:13 -0500, Mads Kiilerich
>>>> <mads at kiilerich.com> wrote:
>>>>
>>>>> On 12/29/2014 06:34 PM, John Turner wrote:
>>>>>> Greetings,
>>>>>>
>>>>>> I'm seeking some clarity on the mechanics and/or best-practices for
>>>>>> implementation of hg notify, namely, which side of the execution  
>>>>>> chain
>>>>>> should invoke the mail notification, given a local(n) <-->
>>>>>> centralized(1) workflow.
>>>>>> ..
>>
>>>>>> .. My initial
>>>>>> expectation was that the passive repo (i.e., the central repo) would
>>>>>> invoke the mail notification, and thereby obviate the need to  
>>>>>> define a
>>>>>> notify config for each local developer, but it appears that hg  
>>>>>> notify
>>>>>> executes from the active repo only.
>>>>>
>>>>> Correct, doing it on the central server makes more sense than doing  
>>>>> it
>>>>> on the "client" side.
>>>>>
>>>>> The server side hg is however not "passive". The example in the
>>>>> beginning of "hg help notify" shows how to use hooks that will be
>>>>> invoked on the server side when a client push changes.
>>>>>
>>>>> /Mads
>>>>
>>>> Thanks for offering your advice on this Mads.
>>>>
>>>> Hmm... so far no matter what I do, my client-side push does nothing to
>>>> invoke the server-side hooks.
>>>
>>> Then you have to debug your server side setup.
>>>
>>> I don't think you have told us anything about your server side setup so
>>> any advice will probably be wrong.
>>>
>>> /Mads
>>
>> The the canonical central repo exists on a Windows 2008 R2 box.
>> The directory owner of the central repo is a shared domain account:  
>> 'companydomain\devadmin'
>> (this is the account we normally rdp with to work directly in this  
>> server)
>>
>> At the same time, I've added my personal domain account to the  
>> server-side Administrators group, and I've also added my account as a  
>> share on the actual server-side repo directory (allowing me to map it  
>> on my local machine, and generally to perform source control operations  
>> between my local repo and the server repo without running hgweb).
>>
>> The directory owner of my local repo is "Administrators" (as opposed to  
>> the shared domain account referenced above, which I suspect may be part  
>> of the issue..)
>>
>> Interestingly, when I enable the notify hook on my local machine, and  
>> push from the rdp-connected server (with server-side notify disabled),  
>> it DOES send the email - and returns the changegroup hook when I run  
>> 'hg showconfig hooks' from the server's CLI.
>>
>> However, the converse is not true - 'hg showconfig hooks' run on my  
>> local machine CLI with notify locally disabled, and server-side notify  
>> enabled yields nothing.  At the same time 'hg showconfig hooks' run on  
>> the server-side CLI via rdp returns the changegroup hook reference.
>>
>> So I'm 3 for 4:
>> - local notify enabled and local push to central sends email
>> - central notify enabled and central push to local sends email
>> - local notify enabled and central push to local sends email
>>
>> ..and trying to solve for central notify enabled and local push to  
>> central.
>>
>> Hope that gives enough background for anyone and isn't too confusing.
>>
>> Cheers,
>> John
>>
>
> How are you enabling and configuring the notify extension on the server?  
> In the repository’s hgrc file, or in a different config file? Your  
> original mail mentioned “mercurial.ini”, which suggests that you’re  
> configuring this in the config file for a *user* on the server (eg.  
> C:\Users\devadmin\mercurial.ini).
>
> If you are pushing to a repository on a mapped network drive, then as  
> far as mercurial is concerned this is a “local” push. There is only a  
> single “hg” process running (as opposed to pushing over http or ssh,  
> where there are 2 hg processes running). The user account that owns the  
> remote repository is not particularly relevant - mercurial is simply  
> performing filesystem operations directly in the repository. Mercurial  
> doesn’t even need to be installed on the server for this to work.
>
> However, this also means that mercurial won’t load a user config file  
> from the remote server. The only config file it will read from the  
> server will be the one inside the repository itself, at <repo>/.hg/hgrc.  
> This is where you would need to configure the notify extension.
>
> In this configuration, it is still your client-side hg process which is  
> actually loading the extension and sending the email. If you need the  
> email to be sent by the server, then you need to be connecting to an hg  
> process running on the server, either via ssh or http (hgweb).
>
> Hope that helps,
>
> Simon

Thanks Simon, this clears things up quite a bit!

(and for the record, it is the C:\Users\devadmin\mercurial.ini file that  
I'm testing with)

Given the realities - small dev team, an unfun/unsuccessful first pass at  
setting up hgweb on IIS, and not relishing an alternative foray of setting  
up ssh connectivity, I think I'll opt to stay with the "local" setup.

So if I understand you correctly, I can enable the notify extension on  
each dev's machine with shares to central repo - wherein the  
<repo>\.hg\hgrc config file will be defined for *how/when* to send the  
email (rather than in the central %HOME%\mercurial.ini) - but the actual  
email gets generated on the client/local side based on that config.  Does  
that sound feasible?




More information about the Mercurial mailing list