hgbook
annotate ja/hook.tex @ 1114:527b86d55d4a
inotify: update installation information
inotify is shipped in Mercurial since 1.0, which greatly simplifies the installation process
inotify is shipped in Mercurial since 1.0, which greatly simplifies the installation process
author | Nicolas Dumazet <nicdumz.commits@gmail.com> |
---|---|
date | Sun Dec 13 16:35:56 2009 +0900 (2009-12-13) |
parents | |
children |
rev | line source |
---|---|
foozy@708 | 1 \chapter{Handling repository events with hooks} |
foozy@708 | 2 \label{chap:hook} |
foozy@708 | 3 |
foozy@708 | 4 Mercurial $B$O!"%j%]%8%H%j$KH/@8$7$?%$%Y%s%H$K1~$8$F!"(B |
foozy@708 | 5 $B<+F0E*$J=hM}$r<B9T$9$k6/NO$J;EAH$_$rDs6!$7$F$$$^$9!#(B |
foozy@708 | 6 $B4v$D$+$N>u67$G$O!"(B |
foozy@708 | 7 $B%$%Y%s%H$KBP$9$k(B Mercurial $B$N1~Ez7k2L$r@)8f$9$k$3$H$b$G$-$^$9!#(B |
foozy@708 | 8 |
foozy@708 | 9 Mercurial $B$,MxMQ$9$k$3$l$i$N=hM}$O!"(B |
foozy@708 | 10 \emph{$B%U%C%/(B}$B!J(Bhook$B!K$H8F$P$l$F$$$^$9!#(B |
foozy@708 | 11 $B9=@.4IM}%7%9%F%`$K$h$C$F$O%U%C%/$r(B``$B%H%j%,(B''$B$H8F$V$3$H$b$"$j$^$9$,!"(B |
foozy@708 | 12 $B$3$l$i$O6&$KF1$89M$(J}$r;X$7$^$9!#(B |
foozy@708 | 13 |
foozy@708 | 14 \section{An overview of hooks in Mercurial} |
foozy@708 | 15 |
foozy@708 | 16 Mercurial $B$,Ds6!$9$k%U%C%/$N4JC1$J%j%9%H$r<($7$^$9!#(B |
foozy@708 | 17 $B$3$l$i$N%U%C%/$K4X$9$k>\:Y$O(B \ref{sec:hook:ref}~$B@a$G@bL@$7$^$9!#(B |
foozy@708 | 18 |
foozy@708 | 19 \begin{description} |
foozy@708 | 20 |
foozy@708 | 21 \item[\small\hook{changegroup}] |
foozy@708 | 22 $B30It%j%]%8%H%j$+$i%A%'%s%8%;%C%H72$,;}$A9~$^$l$?8e$K<B9T$5$l$^$9!#(B |
foozy@708 | 23 |
foozy@708 | 24 \item[\small\hook{commit}] |
foozy@708 | 25 $B%m!<%+%k%j%]%8%H%j$K$*$$$F?7$?$J%A%'%s%8%;%C%H$,:n@.$5$l$?8e$K<B9T$5$l$^$9!#(B |
foozy@708 | 26 |
foozy@708 | 27 \item[\small\hook{incoming}] |
foozy@708 | 28 $B30It%j%]%8%H%j$+$i;}$A9~$^$l$??7$?$J%A%'%s%8%;%C%HKh$K#12s$E$D<B9T$5$l$^$9!#(B |
foozy@708 | 29 $B;}$A9~$^$l$?%A%'%s%8%;%C%H$N(B\emph{$B$^$H$^$j(B}$B$NC10L$G5/F0$5$l$k(B |
foozy@708 | 30 \hook{changegroup} $B$H$N0c$$$KCm0U$7$F$/$@$5$$!#(B |
foozy@708 | 31 |
foozy@708 | 32 \item[\small\hook{outgoing}] |
foozy@708 | 33 $B30It%j%]%8%H%j$X%A%'%s%8%;%C%H72$,E>Aw$5$l$?8e$K<B9T$5$l$^$9!#(B |
foozy@708 | 34 |
foozy@708 | 35 \item[\small\hook{prechangegroup}] |
foozy@708 | 36 $B30It%j%]%8%H%j$+$i%A%'%s%8%;%C%H72$,;}$A9~$^$l$kA0$K<B9T$5$l$^$9!#(B |
foozy@708 | 37 |
foozy@708 | 38 \item[\small\hook{precommit}] |
foozy@708 | 39 $B@)8fMQ!#(B |
foozy@708 | 40 $B%m!<%+%k%j%]%8%H%j$X$N%3%_%C%HA0$K<B9T$5$l$^$9!#(B |
foozy@708 | 41 |
foozy@708 | 42 \item[\small\hook{preoutgoing}] |
foozy@708 | 43 $B@)8fMQ!#(B |
foozy@708 | 44 $B30It%j%]%8%H%j$X%A%'%s%8%;%C%H72$,E>Aw$5$l$kA0$K<B9T$5$l$^$9!#(B |
foozy@708 | 45 |
foozy@708 | 46 \item[\small\hook{pretag}] |
foozy@708 | 47 $B@)8fMQ!#%?%0@8@.A0$K<B9T$5$l$^$9!#(B |
foozy@708 | 48 |
foozy@708 | 49 \item[\small\hook{pretxnchangegroup}] |
foozy@708 | 50 $B@)8fMQ!#(B |
foozy@708 | 51 $B30It$+$i%m!<%+%k%j%]%8%H%j$X$H%A%'%s%8%;%C%H72$,;}$A9~$^$l$?:]$K!"(B |
foozy@708 | 52 $BJQ99$r915WE*$J$b$N$K$9$k%H%i%s%6%/%7%g%s$,40N;$9$kA0$K<B9T$5$l$^$9!#(B |
foozy@708 | 53 |
foozy@708 | 54 \item[\small\hook{pretxncommit}] |
foozy@708 | 55 $B@)8fMQ!#(B |
foozy@708 | 56 $B%m!<%+%k%j%]%8%H%j$K$*$$$F?7$?$J%A%'%s%8%;%C%H$,:n@.$5$l$?:]$K!"(B |
foozy@708 | 57 $BJQ99$r915WE*$J$b$N$K$9$k%H%i%s%6%/%7%g%s$,40N;$9$kA0$K<B9T$5$l$^$9!#(B |
foozy@708 | 58 |
foozy@708 | 59 \item[\small\hook{preupdate}] |
foozy@708 | 60 $B@)8fMQ!#(B |
foozy@708 | 61 $B:n6HNN0h%G%#%l%/%H%j$N99?7!&%^!<%8$,<B;\$5$l$kA0$K<B9T$5$l$^$9!#(B |
foozy@708 | 62 |
foozy@708 | 63 \item[\small\hook{tag}] |
foozy@708 | 64 $B%?%0$,@8@.$5$l$?8e$K<B9T$5$l$^$9!#(B |
foozy@708 | 65 |
foozy@708 | 66 \item[\small\hook{update}] |
foozy@708 | 67 $B:n6HNN0h%G%#%l%/%H%j$N99?7!&%^!<%8$,40N;$7$?8e$K<B9T$5$l$^$9!#(B |
foozy@708 | 68 |
foozy@708 | 69 \end{description} |
foozy@708 | 70 |
foozy@708 | 71 ``$B@)8fMQ(B''$B$H=q$+$l$F$$$k%U%C%/$O!"(B |
foozy@708 | 72 $B=hM}$N7QB3@-$N2DH]$rH=Dj$9$k5!G=$r;}$C$F$$$^$9!#(B |
foozy@708 | 73 $B%U%C%/$N<B9T$,@.8y$7$?>l9g!"(B |
foozy@708 | 74 $B%U%C%/$KBP1~$9$k=hM}$O7QB3$5$l$^$9$,!"(B |
foozy@708 | 75 $B%U%C%/$N<B9T$,<:GT$7$?>l9g!"(B |
foozy@708 | 76 $BBP1~$9$k=hM}$O5v2D$5$l$J$$$+<B9T$7$J$+$C$?$3$H$K$J$j$^$9(B |
foozy@708 | 77 $B!J$I$A$i$K$J$k$+$O%U%C%/$K1~$8$F7h$^$j$^$9!K!#(B |
foozy@708 | 78 |
foozy@708 | 79 \section{Hooks and security} |
foozy@708 | 80 |
foozy@708 | 81 \subsection{Hooks are run with your privileges} |
foozy@708 | 82 |
foozy@708 | 83 $B%j%]%8%H%j$K$*$$$F(B Mercurial $B$N%3%^%s%I$r<B9T$7!"(B |
foozy@708 | 84 $B$=$N%3%^%s%I$,%U%C%/$r5/F0$9$k$3$H$K$J$C$?>l9g!"(B |
foozy@708 | 85 \emph{$B%3%^%s%I<B9T<T$N(B}$B%7%9%F%`>e$K$*$$$F!"(B |
foozy@708 | 86 \emph{$B%3%^%s%I<B9T<T$N(B}$B%f!<%6%"%+%&%s%H$K$h$j!"(B |
foozy@708 | 87 \emph{$B%3%^%s%I<B9T<T$N(B}$B8"8B%l%Y%k$G<B9T$5$l$^$9!#(B |
foozy@708 | 88 $B%U%C%/$OG$0U$N<B9T%3!<%I$G$9$+$i!"(B |
foozy@708 | 89 $B==J,$JG[N8$r;}$C$F07$&I,MW$,$"$j$^$9!#(B |
foozy@708 | 90 $BC/$,:n@.$7$F2?$r$9$k%U%C%/$J$N$+$r=OCN$7$F$$$k3N?.L5$7$K!"(B |
foozy@708 | 91 $B%U%C%/$r%$%s%9%H!<%k$7$J$$$G$/$@$5$$!#(B |
foozy@708 | 92 |
foozy@708 | 93 $B;~$K$O!"(B |
foozy@708 | 94 $B<+J,$G%$%s%9%H!<%k$7$?$N$G$O$J$$%U%C%/$K;/$5$l$k$+$b$7$l$^$;$s!#(B |
foozy@708 | 95 $BFk@w$_$NL5$$%7%9%F%`>e$G(B Mercurial $B$r;HMQ$9$k:]$K$O!"(B |
foozy@708 | 96 Mercurial $B$,%7%9%F%`6&DL$N(B \hgrc\ |
foozy@708 | 97 $B%U%!%$%k$GDj5A$5$l$?%U%C%/$r<B9T$9$k$+$b$7$l$^$;$s!#(B |
foozy@708 | 98 |
foozy@708 | 99 $BB>$N%f!<%6$,=jM-$9$k%j%]%8%H%j$G:n6H$9$k>l9g!"(B |
foozy@708 | 100 Mercurial $B$O$=$N%f!<%6$N%j%]%8%H%j$GDj5A$5$l$?%U%C%/$r<B9T$G$-$^$9$,!"(B |
foozy@708 | 101 $B$=$l$O(B``$B$"$J$?$N(B''$B8"8B$G<B9T$5$l$^$9!#(B |
foozy@708 | 102 $BNc$($P!"$"$k%j%]%8%H%j$+$i(B \hgcmd{pull} $B$7$?:]$K!"(B |
foozy@708 | 103 $B$=$N%j%]%8%H%j$N(B \sfilename{.hg/hgrc} $B%U%!%$%k$,(B |
foozy@708 | 104 \hook{outgoing} $B%U%C%/$rDj5A$7$F$$$?>l9g!"(B |
foozy@708 | 105 $B%j%b!<%H%j%]%8%H%j$N=jM-<T$GL5$+$C$?$H$7$F$b!"(B |
foozy@708 | 106 $B%U%C%/$O$"$J$?$N%"%+%&%s%H$G<B9T$5$l$^$9!#(B |
foozy@708 | 107 |
foozy@708 | 108 \begin{note} |
foozy@708 | 109 $B$3$N86B'$O!"(B |
foozy@708 | 110 $B%m!<%+%k%U%!%$%k%7%9%F%`$+%M%C%H%o!<%/%U%!%$%k%7%9%F%`>e$N%j%]%8%H%j$+$i(B |
foozy@708 | 111 pull $B$7$?>l9g$K$N$_E,MQ$5$l$^$9!#(B |
foozy@708 | 112 http $B$d(B ssh $B7PM3$G(B pull $B$7$?>l9g!"(B |
foozy@708 | 113 $B%U%C%/$,<B9T$5$l$k:]$N%"%+%&%s%H$O!"(B |
foozy@708 | 114 $B%5!<%P>e$G%5!<%P%W%m%;%9$r<B9T$9$k%"%+%&%s%H$G$9!#(B |
foozy@708 | 115 \end{note} |
foozy@708 | 116 |
foozy@708 | 117 $B%j%]%8%H%j$K$*$1$k%U%C%/$NDj5A>u67$r8+$k$K$O!"(B |
foozy@708 | 118 \hgcmdargs{showconfig}{hooks} $B%3%^%s%I$,MxMQ$G$-$^$9!#(B |
foozy@708 | 119 $B$"$k%j%]%8%H%j$G:n6HCf$K!"(B |
foozy@708 | 120 $B<+J,$N=jM-$7$F$$$J$$JL$J%j%]%8%H%j(B |
foozy@708 | 121 $B$H$NO"7H!JNc!'(B \hgcmd{pull} $B$J$$$7(B \hgcmd{incoming}$B!K$,I,MW$K$J$C$?>l9g!"(B |
foozy@708 | 122 $B%j%]%8%H%j$N%U%C%/Dj5A>u67$r3NG'$9$Y$-$G$9(B\footnote{$BLuCm(B: |
foozy@708 | 123 ``XXX'' $B$,IUM?$5$l$F$$$k$3$H$+$i86J8L$40!)(B}$B!#(B |
foozy@708 | 124 |
foozy@708 | 125 \subsection{Hooks do not propagate} |
foozy@708 | 126 |
foozy@708 | 127 Mercurial $B$G$O!"%U%C%/@_Dj$N9=@.4IM}$O9T$o$l$J$$$?$a!"(B |
foozy@708 | 128 $B%j%]%8%H%j$N(B clone $B$J$$$7(B pull $B$N:]$K!"(B |
foozy@708 | 129 $B%U%C%/@_Dj$OEAGE$7$^$;$s!#(B |
foozy@708 | 130 $B$=$NM}M3$O4JC1$G!"%U%C%/$O40A4$KG$0U$N<B9T%3!<%I$@$+$i$G$9!#(B |
foozy@708 | 131 $B%U%C%/$O!"(B |
foozy@708 | 132 $B%3%^%s%I<B9T<T$N%^%7%s>e$K$*$$$F!"(B |
foozy@708 | 133 $B%3%^%s%I<B9T<T$N%f!<%6%"%+%&%s%H$K$h$j!"(B |
foozy@708 | 134 $B%3%^%s%I<B9T<T$N8"8B%l%Y%k$G<B9T$5$l$^$9!#(B |
foozy@708 | 135 |
foozy@708 | 136 $B%U%C%/$N9=@.4IM}$N<BAu$O!"(B |
foozy@708 | 137 $B9=@.4IM}%7%9%F%`MxMQ<T$N%"%+%&%s%H$r<eBN2=$5$;$k>e$G!"(B |
foozy@708 | 138 $BMF0W$K0-MQ2DG=$JJ}K!$rDs6!$7$F$7$^$&$?$a!"(B |
foozy@708 | 139 $B$"$i$f$kJ,;69=@.4IM}%7%9%F%`$K$H$C$F6K$a$FL5KE$H8@$($^$9!#(B |
foozy@708 | 140 |
foozy@708 | 141 Mercurial $B$O%U%C%/$rEAGE$7$J$$$?$a!"(B |
foozy@708 | 142 $B6&DL$N%W%m%8%'%/%H$G$NB>$N%a%s%P!<$H$NO"7H$N:]$K$O!"(B |
foozy@708 | 143 $BH`$i$,<+J,$HF1$8(B Mercurial $B$N%U%C%/$rMxMQ$7$F$$$k$3$H$d!"(B |
foozy@708 | 144 $BH`$i$,%U%C%/$r@5$7$/@_Dj$7$F$$$k$3$H$r2>Dj$7$F$O$$$1$^$;$s!#(B |
foozy@708 | 145 $BH`$i$K%U%C%/$N;HMQ$r4|BT$9$k$N$G$"$l$P!"(B |
foozy@708 | 146 $B$=$l$rJ8=q2=$9$Y$-$G$9!#(B |
foozy@708 | 147 |
foozy@708 | 148 $B4k6H$N%$%s%H%i%M%C%H$N>l9g!"(B |
foozy@708 | 149 $BNc$($P(B Mercurial $B$N(B``$BI8=`E*$J(B''$B%$%s%9%H!<%k$r(B NFS $B>e$G9T$$!"(B |
foozy@708 | 150 $BAH?%$G6&DL$N(B \hgrc\ $B%U%!%$%k$GA4$F$N%f!<%6$,;HMQ$9$Y$-%U%C%/$rDj5A$9$k!"(B |
foozy@708 | 151 $B$H$$$C$?$3$H$,2DG=$G$"$k$?$a!"(B |
foozy@708 | 152 $B%U%C%/$N4IM}$O4vJ,MF0W$K$J$j$^$9!#(B |
foozy@708 | 153 $B$7$+$7!"$=$l$G$b8e=R$9$k$h$&$J@)8B$,@8$8$^$9!#(B |
foozy@708 | 154 |
foozy@708 | 155 \subsection{Hooks can be overridden} |
foozy@708 | 156 |
foozy@708 | 157 Mercurial $B$O!":FDj5A$K$h$k%U%C%/$N>e=q$-$r5v$7$F$$$^$9!#(B |
foozy@708 | 158 $B%U%C%/;XDj$K6uJ8;zNs$r@_Dj$9$k$3$H$G%U%C%/@_Dj$rL58z$K$9$k$3$H$b$G$-$^$9$7!"(B |
foozy@708 | 159 $B4uK>DL$j$K?6$kIq$$$rJQ$($k$3$H$b$G$-$^$9!#(B |
foozy@708 | 160 |
foozy@708 | 161 $B4v$D$+$N%U%C%/$rDj5A$7$?!"(B |
foozy@708 | 162 $B%^%7%s$J$$$7AH?%6&DL$N(B \hgrc\ $B%U%!%$%k$rG[Hw$7$?$H$7$F$b!"(B |
foozy@708 | 163 $BMxMQ<T$K$h$k%U%C%/$NL58z2=$d>e=q$-$,9T$o$l$k2DG=@-$,$"$k$3$H$r!"(B |
foozy@708 | 164 $BM}2r$7$F$*$/I,MW$,$"$j$^$9!#(B |
foozy@708 | 165 |
foozy@708 | 166 \subsection{Ensuring that critical hooks are run} |
foozy@708 | 167 |
foozy@708 | 168 $BB>$N%a%s%P!<$K<B;\$7$FM_$7$/$J$$;vJA$K$D$$$FE;$a$?J}?K$r!"(B |
foozy@708 | 169 $B6/@)$7$?$$$3$H$b;~$K$O$"$k$+$b$7$l$^$;$s!#(B |
foozy@708 | 170 $BNc$($P!"A4$F$N%A%'%s%8%;%C%H$K$OI,$:87L)$J%F%9%H0l<0$KDL$C$F$$$FM_$7$$!"(B |
foozy@708 | 171 $B$H;W$&$+$b$7$l$^$;$s!#(B |
foozy@708 | 172 $B$3$NMWK>$r<B8=$9$k$?$a$K!"(B |
foozy@708 | 173 $BAH?%6&DL$N(B \hgrc\ $B%U%!%$%k$G%U%C%/$rDj5A$7$?$H$7$F$b!"(B |
foozy@708 | 174 $B%b%P%$%k(B PC $B$+$i%"%/%;%9$9$k1s3V%f!<%6Ey$K$O5!G=$7$^$;$s$7!"(B |
foozy@708 | 175 $BL^O@%m!<%+%k%f!<%6$K$H$C$F$b%U%C%/$N>e=q$-$K$h$C$FL58z2=$,2DG=$G$9!#(B |
foozy@708 | 176 |
foozy@708 | 177 $B!J%W%m%8%'%/%H$K$*$1$k!K(BMercurial $B$NMxMQJ}?K$H$7$F!"(B |
foozy@708 | 178 $B%a%s%P!<$,JQ99EAGE$9$k:]$K$O!"(B |
foozy@708 | 179 $B4XLg$N5!G=$r2L$?$9$h$&$KE,@Z$K@_Dj$5$l$?<~CN$N(B``$B@55,(B''$B%5!<%P$rDL$9!"(B |
foozy@708 | 180 $B$H:vDj$9$k$3$H$G!"(B |
foozy@708 | 181 $B%U%C%/$K$h$kMxMQJ}?K$N6/@)$rBeBX$9$k$3$H$,2DG=$G$9!#(B |
foozy@708 | 182 |
foozy@708 | 183 $B<B8=J}K!$N0l$D$H$7$F!"(B |
foozy@708 | 184 $B%=!<%7%c%k%(%s%8%K%"%j%s%0$H5;=Q$NAH$_9g$o$;$K$h$k$b$N$,$"$j$^$9!#(B |
foozy@708 | 185 $B%"%/%;%9@)8BIU$-%"%+%&%s%H$rMQ0U$7!"(B |
foozy@708 | 186 $BEv3:%"%+%&%s%H$G4IM}$5$l$?%j%]%8%H%j$K!"(B |
foozy@708 | 187 $B3F%a%s%P!<$O%M%C%H%o!<%/7PM3$GJQ99$r(B push $B$G$-$k$h$&$K$7$^$9$,!"(B |
foozy@708 | 188 $B$=$N%"%+%&%s%H$G%m%0%$%s$7$?$j!"(B |
foozy@708 | 189 $BDL>o$N%7%'%k%3%^%s%I$r<B9T$7$?$j$G$-$J$$$h$&$K$7$^$9!#(B |
foozy@708 | 190 $B$3$N$^$^$G$O!"(B |
foozy@708 | 191 $B%a%s%P!<$O!V%4%_!W$r4^$`$h$&$J%A%'%s%8%;%C%H$N%3%_%C%H$b2DG=$G$9!#(B |
foozy@708 | 192 |
foozy@708 | 193 $B%a%s%P!<$,(B pull $B$9$k%5!<%P!<$X$HC/$+$,%A%'%s%8%;%C%H$r(B push $B$7$?>l9g!"(B |
foozy@708 | 194 $B$=$N%A%'%s%8%;%C%H$,1JB32=$5$l$kA0$K%5!<%P!<$O%F%9%H$r<B;\(B\footnote{ |
foozy@708 | 195 $BLuCm(B: $B%F%9%H<B;\$O%U%C%/$G<B8=$5$l$^$9$,!"(B |
foozy@708 | 196 (1) $B%U%C%/$N<B9T$O%"%/%;%9@)8BIU$-%"%+%&%s%H$N8"8B$G<B9T$5$l!"(B |
foozy@708 | 197 (2) $B%j%b!<%H$+$i$N(B push $B$N>l9g$O%U%C%/$N>e=q$-$,$G$-$J$$!"(B |
foozy@708 | 198 $B$H$$$&$3$H$+$i!"%;%-%e%j%F%#!&%U%C%/@_Dj$NLdBj$,6&$K2r>C$5$l$^$9!#(B}$B$7!"(B |
foozy@708 | 199 $B%F%9%H0l<0$KDL$i$J$1$l$P$=$N%A%'%s%8%;%C%H$r5qH]$7$^$9!#(B |
foozy@708 | 200 $B%a%s%P!<$,$3$N%U%#%k%?%5!<%P$+$i$7$+%A%'%s%8%;%C%H$N(B pull $B$r$7$J$$$N$G$"$l$P!"(B |
foozy@708 | 201 $B%a%s%P!<$,(B pull $B$9$kA4$F$N%A%'%s%8%;%C%H$O!"(B |
foozy@708 | 202 $B<+F0E*$KE@8!$5$l$F$$$k$3$H$,J]>Z$5$l$^$9!#(B |
foozy@708 | 203 |
foozy@708 | 204 \section{Care with \texttt{pretxn} hooks in a shared-access repository} |
foozy@708 | 205 \label{sec:hook:carepretxn} |
foozy@708 | 206 |
foozy@708 | 207 $BB?$/$N?M$K$h$j6&M-$5$l$F$$$k%j%]%8%H%j$KBP$7$F!"(B |
foozy@708 | 208 $B%U%C%/$K$h$k<+F0<B9T$r@_Dj$9$k>l9g!"(B |
foozy@708 | 209 $B<B;\J}<0$K$OCm0U$,I,MW$G$9!#(B |
foozy@708 | 210 |
foozy@708 | 211 Mercurial $B$,%j%]%8%H%j$K%m%C%/$r3]$1$k$N$O!"(B |
foozy@708 | 212 $B%j%]%8%H%j$K=q$-9~$_$r9T$&;~$@$1$G$"$j!"(B |
foozy@708 | 213 $B3n$D%m%C%/$KBP$7$FCm0U$rJ'$&$N$O!"(B |
foozy@708 | 214 Mercurial $B$N=q$-9~$_=hM}$NItJ,E*$J2U=j$@$1$G$9!#(B |
foozy@708 | 215 $B=q$-9~$_%m%C%/$O!"(B |
foozy@708 | 216 $BJ#?t$N=hM}$NF1;~=q$-9~$_$K$h$k%j%]%8%H%jGKB;$rKI$0$3$H$G!"(B |
foozy@708 | 217 $B$*8_$$$N=q$-9~$_FbMF$rJ]8n$7$^$9!#(B |
foozy@708 | 218 |
foozy@708 | 219 Mercurial $B$O%G!<%?$NFI$_9~$_=q$-=P$7=g=x$KCm0U$rJ'$C$F$$$^$9$+$i!"(B |
foozy@708 | 220 $B%j%]%8%H%j$+$i$N%G!<%?FI$_9~$_$N:]$K%m%C%/$OI,MW$"$j$^$;$s!#(B |
foozy@708 | 221 Mercurial $B$,%j%]%8%H%j$+$i%G!<%?$rFI$_9~$`:]$K$O!"(B |
foozy@708 | 222 $B%m%C%/$KBP$7$FCm0U$rJ'$$$^$;$s!#(B |
foozy@708 | 223 $B%m%C%/$rI,MW$H$7$J$$$3$N;EAH$_$O!"(B |
foozy@708 | 224 $B@-G=$HJ?9T@-$rBg$-$/8~>e$5$;$F$$$^$9!#(B |
foozy@708 | 225 |
foozy@708 | 226 $B$7$+$7$J$,$i!"(B |
foozy@708 | 227 $B!V%m%C%/$5$l$J$$!W$H$$$&$3$H$O!"(B |
foozy@708 | 228 $B$=$l$rCN$i$J$$$H!"(B |
foozy@708 | 229 $BBg$-$J@-G=8~>e$H0z$-49$($K%H%i%V%kH/@8$N@x:_E*$J4m81@-$r;}$C$F$$$^$9!#(B |
foozy@708 | 230 $B$3$N4m81@-$K$D$$$F@bL@$9$k$K$O!"(B |
foozy@708 | 231 $B%j%]%8%H%j$X$N%A%'%s%8%;%C%H$NDI2C!"(B |
foozy@708 | 232 $B$*$h$S$=$l$i%A%'%s%8%;%C%H$NFI$_=P$7$r!"(B |
foozy@708 | 233 Mercurial $B$,$I$&$$$C$?<j=g$G9T$&$+$K$D$$$F!"(B |
foozy@708 | 234 $B4vJ,>\:Y$JCN<1$,I,MW$H$J$j$^$9!#(B |
foozy@708 | 235 |
foozy@708 | 236 Mercurial $B$,%a%?%G!<%?$r(B\emph{$B=q$-=P$9(B}$B:]$K$O!"(B |
foozy@708 | 237 $BBP>]%U%!%$%k$K%a%?%G!<%?$rD>@\=q$-=P$7$^$9!#(B |
foozy@708 | 238 $B:G=i$K(B filelog $B$K%a%?%G!<%?$r=q$-=P$7!"(B |
foozy@708 | 239 $B<!$K(B manifest $B$N%G!<%?!J$3$l$K$O!"(B |
foozy@708 | 240 filelog $B$K=q$-=P$7$??7$7$$%G!<%?$X$N%]%$%s%?$,4^$^$l$^$9!K!"(B |
foozy@708 | 241 $B$=$7$F(Bchangelog$B$N%G!<%?!J$3$l$K$O!"(B |
foozy@708 | 242 manifest $B$K=q$-=P$7$??7$7$$%G!<%?$X$N%]%$%s%?$,4^$^$l$^$9!K$,=q$-=P$5$l$^$9!#(B |
foozy@708 | 243 $B8D!9$N%U%!%$%k$X$N:G=i$N=q$-=P$7$NA0$K!"(B |
foozy@708 | 244 Mercurial $B$O8D!9$N%U%!%$%k$N=*C<0LCV>pJs$r%H%i%s%6%/%7%g%s%m%0$K5-O?$7$^$9!#(B |
foozy@708 | 245 Mercurial $B$K$h$j%H%i%s%6%/%7%g%s$,4,$-La$5$l$k:]$K$O!"(B |
foozy@708 | 246 $B%H%i%s%6%/%7%g%s3+;O;~E@$N%5%$%:$K$^$G8D!9$N%U%!%$%k$,@Z$j5M$a$i$l$^$9!#(B |
foozy@708 | 247 |
foozy@708 | 248 Mercurial $B$,%a%?%G!<%?$r(B\emph{$BFI$_9~$`(B}$B:]$K$O!"(B |
foozy@708 | 249 changelog $B$rFI$_9~$s$@8e$G$=$NB>$N%U%!%$%k$NFI$_9~$_$r9T$$$^$9!#(B |
foozy@708 | 250 $B%G!<%?FI$_9~$_$N:]$K$O!"(B |
foozy@708 | 251 $B@h$KFI$_9~$s$@(B changelog $B$+$iE~C#2DG=$J(B |
foozy@708 | 252 manifest $B$d(B filelog $B$NItJ,$K$7$+%"%/%;%9$7$J$$$N$G!"(B |
foozy@708 | 253 $BIT==J,$J=q$-=P$7Cf$N%G!<%?$rFI$`$3$H$O$"$j$^$;$s!#(B |
foozy@708 | 254 |
foozy@708 | 255 $B4v$D$+$N@)8fMQ%U%C%/$N!J(B\hook{pretxncommit} $B$d(B \hook{pretxnchangegroup}$B!K(B |
foozy@708 | 256 $B$O!"%H%i%s%6%/%7%g%s$N40N;D>A0$K<B9T$5$l$^$9!#(B |
foozy@708 | 257 $B$3$N;~E@$GA4$F$N%a%?%G!<%?$O=q$-=P$7:Q$_$G$9$,!"(B |
foozy@708 | 258 Mercurial $B$O%H%i%s%6%/%7%g%s$r4,$-La$9$3$H$G!"(B |
foozy@708 | 259 $B?7$?$K=q$-=P$5$l$?%G!<%?$rGK4~$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 260 |
foozy@708 | 261 $B%H%i%s%6%/%7%g%s40N;A0$N%A%'%s%8%;%C%H$O1JB3@-$,3NDj$7$F$*$i$:!"(B |
foozy@708 | 262 $B$=$N$?$a(B``$BK\Ev$KB8:_$9$k(B''$B$H$_$J$9$3$H$,$G$-$J$$$3$H$+$i!"(B |
foozy@708 | 263 $B%H%i%s%6%/%7%g%s40N;A0$K<B9T$5$l$k@)8fMQ%U%C%/$,=*N;$^$G$KD9;~4V$rMW$9$k>l9g!"(B |
foozy@708 | 264 $B1JB3@-$,3NDj$7$F$$$J$$%A%'%s%8%;%C%H$N%a%?%G!<%?$,!"(B |
foozy@708 | 265 $BJ?9T$7$FF0:n$7$F$$$kB>$N=hM}$K$h$jFI$_=P$5$l$k;~4VBS$,H/@8$7$^$9!#(B |
foozy@708 | 266 $B%U%C%/$N<B9T;~4V$,D9$/$J$kDx!"$3$N;~4VBS$,D9$/$J$j$^$9!#(B |
foozy@708 | 267 |
foozy@708 | 268 \subsection{The problem illustrated} |
foozy@708 | 269 |
foozy@708 | 270 $B86B'E*$K(B \hook{pretxnchangegroup} $B%U%C%/$O!"(B |
foozy@708 | 271 $B=8LsMQ%j%]%8%H%j$G$N<u$1F~$lA0$K!"(B |
foozy@708 | 272 $B?75,%A%'%s%8%;%C%H$N%S%k%I$d%F%9%H$r<+F02=$9$k$N$KE,$7$F$$$^$9!#(B |
foozy@708 | 273 $B$3$NMQK!$O(B |
foozy@708 | 274 ``$B%S%k%I$r<:GT$5$;$k(B''$BJQ99$,=8LsMQ%j%]%8%H%j$KH?1G$5$l$J$$$3$H$rJ]>Z$7$^$9!#(B |
foozy@708 | 275 $B$7$+$7!"(B |
foozy@708 | 276 \hook{pretxnchangegroup} $B%U%C%/$K$h$k%F%9%HES>e$NJQ99$r!"(B |
foozy@708 | 277 $BB>$NMxMQ<T$,(B pull $B$G$-$F$7$^$&$h$&$G$O!"(B |
foozy@708 | 278 $B%F%9%H$NM-MQ@-$,L5$/$J$C$F$7$^$$$^$9!#(B |
foozy@708 | 279 $B%j%]%8%H%jFbMF$N@09g@-$K5?$$$r;}$?$J$$MxMQ<T$O!"(B |
foozy@708 | 280 $B%S%k%I$r<:GT$5$;$k@x:_E*$J2DG=@-$r;}$D%F%9%HL$<B;\$NJQ99$r!"(B |
foozy@708 | 281 $B<+?H$N%j%]%8%H%j$X$HH?1G$7$F$7$^$&$+$i$G$9!#(B |
foozy@708 | 282 |
foozy@708 | 283 $B$3$N$h$&$JFqBj$X$N:G$b0BA4$J5;=QE*2rK!$O!"(B |
foozy@708 | 284 ``$BLgHV(B''$B%j%]%8%H%j$NMxMQ$r(B\emph{$BC1J}8~(B}$B$K8BDj$7$F$7$^$&$3$H$G$9!#(B |
foozy@708 | 285 $BLgHV%j%]%8%H%j$O!"(B |
foozy@708 | 286 $B30It$+$i$N%A%'%s%8%;%C%H$N(B push $B$O5v$7$F$b!"(B |
foozy@708 | 287 pull $B$O$G$-$J$$$h$&$K$7$^$9(B |
foozy@708 | 288 $B!J(B\hook{preoutgoing} $B%U%C%/$G$=$N$h$&$J9T0Y$r6X;_$7$^$9!K!#(B |
foozy@708 | 289 $B?7$7$$%A%'%s%8%;%C%H$K$*$1$k%S%k%I$J$$$7%F%9%H$,@.8y$7$?$J$i$P!"(B |
foozy@708 | 290 $B$=$N%A%'%s%8%;%C%H$rJL$J%j%]%8%H%j$X$H(B push $B$9$k$h$&$K(B |
foozy@708 | 291 \hook{changegroup} $B%U%C%/$r@_Dj$7!"(B |
foozy@708 | 292 $BMxMQ<T$O$=$A$i$N%j%]%8%H%j$+$i(B pull \emph{$B$G$-$k(B}$B$h$&$K$7$^$7$g$&!#(B |
foozy@708 | 293 |
foozy@708 | 294 $B<B:]LdBj!"(B |
foozy@708 | 295 $B$3$N$h$&$J=8Ls$5$l$?%\%H%k%M%C%/$r@_$1$k$3$H$O!"(B |
foozy@708 | 296 $B$"$^$jNI$$%"%$%G%#%"$G$O$J$/(B(XXXX ?)$B!"(B |
foozy@708 | 297 In practice, putting a centralised bottleneck like this in place is |
foozy@708 | 298 not often a good idea |
foozy@708 | 299 $B%H%i%s%6%/%7%g%s$NO31L(B\footnote{$BLuCm(B: |
foozy@708 | 300 $B1JB32=L$3NDj$N%A%'%s%8%;%C%H$,8+$($F$7$^$&$3$H(B}$B$OLdBj$K$J$j$^$;$s!#(B |
foozy@708 | 301 $B%A%'%s%8%;%C%H$r<h$j07$&;~4V$h$j$b$=$l$r%F%9%H$9$k$N$K;~4V$rMW$9$k>u67$G$O!"(B |
foozy@708 | 302 $B%W%m%8%'%/%H$NBg$-$5(B---$B$*$h$S%S%k%I!&%F%9%H$KMW$9$k;~4V(B |
foozy@708 | 303 ---$B$,A}2C$9$k$[$I!"(B |
foozy@708 | 304 ``$B9XF~A0$N;nMQ(B''$B<jK!$K$h$jJI$NFbB&$KAGAa$/Av$j$3$a$^$9!#(BXXXXX ???? |
foozy@708 | 305 As the size of a project---and the time it takes to |
foozy@708 | 306 build and test---grows, you rapidly run into a wall with this ``try |
foozy@708 | 307 before you buy'' approach, where you have more changesets to test than |
foozy@708 | 308 time in which to deal with them. |
foozy@708 | 309 $BHr$1$i$l$J$$7k2L$O!"(B |
foozy@708 | 310 $B$9$Y$F$,4,$-9~$^$l$?ItJ,$K$*$1$k%U%i%9%H%l!<%7%g%s$G$9!#(BXXXXXXX ???? |
foozy@708 | 311 The inevitable result is frustration |
foozy@708 | 312 on the part of all involved. |
foozy@708 | 313 |
foozy@708 | 314 $B$h$jBg5,LO2=2DG=$J<jK!$O!"(B |
foozy@708 | 315 push $BA0$K3F<+$G%S%k%I!&%F%9%H$r<B;\$7$F$b$i$$!"(B |
foozy@708 | 316 push $B$N(B \emph{$B8e(B}$B$KCf1{$G<+F0E*$K%S%k%I!&%F%9%H$r9T$&$3$H$G!"(B |
foozy@708 | 317 $BA4$F$N%A%'%s%8%;%C%H$,NI9%$G$"$k$3$H$r3NG'$9$k!"$H$$$&$b$N$G$9!#(B |
foozy@708 | 318 $B$3$N<jK!$NMxE@$O!"(B |
foozy@708 | 319 $B%j%]%8%H%j$K$*$1$k%A%'%s%8%;%C%H$N<uM}?JEY$K4X$7$F!"(B |
foozy@708 | 320 $B@)8B$,2]$5$l$k$3$H$,L5$$E@$K$"$j$^$9!#(B |
foozy@708 | 321 |
foozy@708 | 322 \section{A short tutorial on using hooks} |
foozy@708 | 323 \label{sec:hook:simple} |
foozy@708 | 324 |
foozy@708 | 325 Mercurial $B$N%U%C%/$O4JC1$K=q$1$^$9!#(B |
foozy@708 | 326 \hgcmd{commit} $B$,40N;$7$?:]$K<B9T$5$l!"(B |
foozy@708 | 327 $B:n@.$7$?$P$+$j$N%A%'%s%8%;%C%H$N%O%C%7%eCM$rI=<($9$k$@$1$N!"(B |
foozy@708 | 328 $B4JC1$J%U%C%/$r=q$$$F$_$^$7$g$&!#(B |
foozy@708 | 329 |
foozy@708 | 330 \begin{figure}[ht] |
foozy@708 | 331 \interaction{hook.simple.init} |
foozy@708 | 332 \caption{A simple hook that runs when a changeset is committed} |
foozy@708 | 333 \label{ex:hook:init} |
foozy@708 | 334 \end{figure} |
foozy@708 | 335 |
foozy@708 | 336 $BA4$F$N%U%C%/$O!"(B\ref{ex:hook:init} $B$NNc$K$*$1$k7A<0$rF'=1$7$^$9!#(B |
foozy@708 | 337 \hgrc\ $B%U%!%$%k$N(B |
foozy@708 | 338 \rcsection{hooks} $B%;%/%7%g%s$K%(%s%H%j$rDI2C$7$^$9!#(B |
foozy@708 | 339 $B:8JU$O<B9T7@5!$K$J$k%$%Y%s%H$NL>A0$G!"(B |
foozy@708 | 340 $B1&JU$O<B9T$5$l$k=hM}$G$9!#(B |
foozy@708 | 341 $B8+$F$o$+$k$h$&$K!"(B |
foozy@708 | 342 $B%U%C%/$K$*$$$F$OG$0U$N%7%'%k%3%^%s%I$r<B9T$G$-$^$9!#(B |
foozy@708 | 343 $B4D6-JQ?t(B |
foozy@708 | 344 $B!JNc$K$*$1$k(B \envar{HG\_NODE} $B$r;2>H$7$F$/$@$5$$!K$rMQ$$$F!"(B |
foozy@708 | 345 Mercurial $B$O%U%C%/$KIU2C>pJs$rEO$7$^$9!#(B |
foozy@708 | 346 |
foozy@708 | 347 \subsection{Performing multiple actions per event} |
foozy@708 | 348 |
foozy@708 | 349 \ref{ex:hook:ext} $B$NNc$K<($9$h$&$J!"(B |
foozy@708 | 350 $BFCDj$N<oN`$N%$%Y%s%H$KBP$7$F#1$D0J>e$N%U%C%/$rDj5A$7$?$$>u67$,!"(B |
foozy@708 | 351 $B$7$P$7$PH/@8$9$k$3$H$G$7$g$&!#(B |
foozy@708 | 352 Mercurial $B$G$O!"(B |
foozy@708 | 353 $B%U%C%/L>$NKvHx$K(B\emph{$B3HD%;R(B}$B$rIUM?$9$k$3$H$G!"(B |
foozy@708 | 354 $BF10l%$%Y%s%H$X$NJ#?t%U%C%/$NDj5A$,2DG=$K$J$j$^$9!#(B |
foozy@708 | 355 $B3HD%;R$NIUM?$O!"(B |
foozy@708 | 356 $B%U%C%/L>$K!"(B |
foozy@708 | 357 $B%T%j%*%I!J(B``\texttt{.}'' $BJ8;z!K$HG$0U$KA*$s$@J8;zNs$rB3$1$k$3$H$G9T$$$^$9!#(B |
foozy@708 | 358 $BNc$($P!"(B |
foozy@708 | 359 \texttt{commit} $B$,H/@8$7$?>l9g!"(B |
foozy@708 | 360 Mercurial $B$O(B |
foozy@708 | 361 \texttt{commit.foo} $B$*$h$S(B |
foozy@708 | 362 \texttt{commit.bar} $B%U%C%/$r<B9T$7$^$9!#(B |
foozy@708 | 363 |
foozy@708 | 364 \begin{figure}[ht] |
foozy@708 | 365 \interaction{hook.simple.ext} |
foozy@708 | 366 \label{ex:hook:ext} |
foozy@708 | 367 \caption{Defining a second \hook{commit} hook} |
foozy@708 | 368 \end{figure} |
foozy@708 | 369 |
foozy@708 | 370 $B$"$k%$%Y%s%H$KJ#?t$N%U%C%/$,Dj5A$5$l$F$$$k:]$K!"(B |
foozy@708 | 371 $B$=$N<B9T=g=x$rL@3N$KDj5A$9$k$?$a$K!"(B |
foozy@708 | 372 Mercurial $B$O%U%C%/$r3HD%;R$G@0Ns$5$;!"(B |
foozy@708 | 373 $B%U%C%/%3%^%s%I$r$3$N@0Ns$5$l$?=g=x$G<B9T$7$^$9!#(B |
foozy@708 | 374 $B>e5-$NNc$G$O!"(B |
foozy@708 | 375 \texttt{commit.foo} |
foozy@708 | 376 $B$NA0$K(B |
foozy@708 | 377 \texttt{commit.bar} $B$r!"(B |
foozy@708 | 378 $B$3$l$i$NA0$K(B |
foozy@708 | 379 \texttt{commit} $B$r<B9T$7$^$9!#(B |
foozy@708 | 380 |
foozy@708 | 381 $B?7$7$$%U%C%/$rDj5A$9$k:]$K!"(B |
foozy@708 | 382 $B2?$i$+$N@bL@E*$J3HD%;R$r;HMQ$9$k$N$ONI$$%"%$%G%#%"$G$9!#(B |
foozy@708 | 383 $B$=$&$9$k$3$H$G!"(B |
foozy@708 | 384 $B$=$N%U%C%/$,2?$r$9$k$?$a$N$b$N$+$r;W$$=P$7$d$9$/$J$j$^$9!#(B |
foozy@708 | 385 $B%U%C%/$N<B9T$,<:GT$7$?>l9g!"(B |
foozy@708 | 386 $B%U%C%/L>$H3HD%;R$r4^$`%(%i!<%a%C%;!<%8$,I=<($5$l$^$9$+$i!"(B |
foozy@708 | 387 $B%U%C%/$,<:GT$7$?M}M3$K4X$7$F!"(B |
foozy@708 | 388 $B@bL@E*$J3HD%;R$+$iB(@=$N%R%s%H$rF@$k$3$H$,$G$-$^$9(B |
foozy@708 | 389 $B!JNc$K4X$7$F$O!"(B\ref{sec:hook:perm}~$B@a$r;2>H$7$F$/$@$5$$!K!#(B |
foozy@708 | 390 |
foozy@708 | 391 \subsection{Controlling whether an activity can proceed} |
foozy@708 | 392 \label{sec:hook:perm} |
foozy@708 | 393 |
foozy@708 | 394 $B@h$NNc$G$O!"(B |
foozy@708 | 395 $B%3%_%C%HA`:n$,40N;$7$?8e$G<B9T$5$l$k(B |
foozy@708 | 396 \hook{commit} $B%U%C%/$r;HMQ$7$^$7$?!#(B |
foozy@708 | 397 $B$3$N%U%C%/$O!"(B |
foozy@708 | 398 $BA`:n$,40N;$7$?8e$G<B9T$5$l$k(B Mercurial $B$N%U%C%/$N#1$D$G$9!#(B |
foozy@708 | 399 $B$3$l$i$N%U%C%/$O!"A`:n$=$N$b$N$K1F6A$r5Z$\$9$3$H$O$"$j$^$;$s!#(B |
foozy@708 | 400 |
foozy@708 | 401 Mercurial $B$G$O!"(B |
foozy@708 | 402 $BA`:n$,3+;O$5$l$kA0$d!"(B |
foozy@708 | 403 $BA`:n$,40N;$9$k$^$G$N4V$KH/@8$9$k%$%Y%s%H$,Dj5A$5$l$F$$$^$9!#(B |
foozy@708 | 404 $B$3$l$i$N%$%Y%s%H$N:]$K5/F0$5$l$k%U%C%/$O!"(B |
foozy@708 | 405 $BA`:n$r7QB32DG=$+CfCG$9$Y$-$+$rH=CG$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 406 |
foozy@708 | 407 \hook{pretxncommit} $B%U%C%/$O!"(B |
foozy@708 | 408 $B%3%_%C%HA`:n$,35$M=*N;$7$?8e!"%3%_%C%H$,40N;$9$kA0$NCJ3,$G5/F0$5$l$^$9!#(B |
foozy@708 | 409 $B8@$$49$($k$J$i!"(B |
foozy@708 | 410 $B%A%'%s%8%;%C%H$rI=$9%a%?%G!<%?$,%G%#%9%/$K=q$-9~$^$l$F$O$$$k$b$N$N!"(B |
foozy@708 | 411 $B%H%i%s%6%/%7%g%s$,L$$@40N;$7$F$$$J$$>u67$G5/F0$5$l$^$9!#(B |
foozy@708 | 412 \hook{pretxncommit} $B%U%C%/$O!"(B |
foozy@708 | 413 $B%H%i%s%6%/%7%g%s$r40N;$5$;$k$N$+!"(B |
foozy@708 | 414 $B$"$k$$$O4,$-La$9$Y$-$+$r7hDj$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 415 |
foozy@708 | 416 \hook{pretxncommit} $B%U%C%/$,=*N;>uBVCM$H$7$F#0$rJV5Q$7$?>l9g!"(B |
foozy@708 | 417 $B%H%i%s%6%/%7%g%s$O40N;$7!"%3%_%C%HA`:n$O=*N;$7$^$9$N$G!"(B |
foozy@708 | 418 \hook{commit} $B%U%C%/$,<B9T$5$l$^$9!#(B |
foozy@708 | 419 \hook{pretxncommit} $B%U%C%/$,=*N;>uBV$H$7$FHs#0$rJV5Q$7$?>l9g!"(B |
foozy@708 | 420 $B%H%i%s%6%/%7%g%s$O4,$-La$5$l!"(B |
foozy@708 | 421 $B%A%'%s%8%;%C%H$rI=$9%a%?%G!<%?$O:o=|$5$l!"(B |
foozy@708 | 422 \hook{commit} $B%U%C%/$O<B9T$5$l$^$;$s!#(B |
foozy@708 | 423 |
foozy@708 | 424 \begin{figure}[ht] |
foozy@708 | 425 \interaction{hook.simple.pretxncommit} |
foozy@708 | 426 \label{ex:hook:pretxncommit} |
foozy@708 | 427 \caption{Using the \hook{pretxncommit} hook to control commits} |
foozy@708 | 428 \end{figure} |
foozy@708 | 429 |
foozy@708 | 430 $BNc(B~\ref{ex:hook:pretxncommit} $BCf$N%U%C%/$O!"(B |
foozy@708 | 431 $B%3%_%C%H;~$N%3%a%s%H$,%P%0(BID$B$r4^$s$G$$$k$3$H$r3NG'$7$F$$$^$9!#(B |
foozy@708 | 432 $B%3%a%s%H$,%P%0(BID$B$r4^$s$G$$$k>l9g!"%3%_%C%H$O40N;$7$^$9!#(B |
foozy@708 | 433 $B$=$&$G$J$1$l$P!"%3%_%C%HA`:n$O4,$-La$5$l$^$9!#(B |
foozy@708 | 434 |
foozy@708 | 435 \section{Writing your own hooks} |
foozy@708 | 436 |
foozy@708 | 437 \hggopt{-v} $B%*%W%7%g%sIU$-!"(B |
foozy@708 | 438 $B$"$k$$$O(B\rcitem{ui}{verbose} $B@_Dj9`L\$r(B``true''$B$K$7$F(B |
foozy@708 | 439 Mercurial $B$r<B9T$9$k$N$,!"(B |
foozy@708 | 440 $B%U%C%/<BAu$N:]$K$OM-MQ$G$"$k$3$H$K5$IU$/$+$b$7$l$^$;$s!#(B |
foozy@708 | 441 $B$3$N$h$&$K$7$F(B Mercurial $B$r<B9T$9$k$3$H$G!"(B |
foozy@708 | 442 $B$=$l$>$l$N%U%C%/$r5/F0$9$k:]$K;vA0$K%a%C%;!<%8$rI=<($7$^$9!#(B |
foozy@708 | 443 |
foozy@708 | 444 \subsection{Choosing how your hook should run} |
foozy@708 | 445 \label{sec:hook:lang} |
foozy@708 | 446 |
foozy@708 | 447 $B%U%C%/$r<BAu$9$k:]$K$O!"DL>o$N%W%m%0%i%`(B---$BE57?E*$K$O%7%'%k%9%/%j%W%H(B--- |
foozy@708 | 448 $B$H$7$F$b<BAu$G$-$^$9$,!"(B |
foozy@708 | 449 Python $B4X?t$H$7$F$b<BAu$G$-!"(B |
foozy@708 | 450 $B$=$N>l9g$O(B Mercurial $B%W%m%;%9Fb$G<B9T$5$l$^$9!#(B |
foozy@708 | 451 |
foozy@708 | 452 $B30It%W%m%0%i%`$H$7$F%U%C%/$r<BAu$9$kMxE@$O!"(B |
foozy@708 | 453 Mercurial $B$NFbIt;v>p$K4X$7$FCN$kI,MW$,L5$$E@$K$"$j$^$9!#(B |
foozy@708 | 454 $BIU2CE*$J>pJs$N<hF@$N$?$a$K!"(B |
foozy@708 | 455 $BDL>o$N(B Mercurial $B%3%^%s%I$r5/F0$9$k$3$H$b$G$-$^$9!#(B |
foozy@708 | 456 $B$=$NMxE@$H0z$-49$($K!"30It!J%W%m%0%i%`$H$7$F$N!K%U%C%/$O!"(B |
foozy@708 | 457 $B%W%m%;%9Fb%U%C%/$h$j$bDcB.(B\footnote{$BLuCm(B: |
foozy@708 | 458 $B8e=R$5$l$^$9$,!"(B |
foozy@708 | 459 $B30It%W%m%0%i%`$K$h$k%U%C%/$,!VDcB.!W$G$"$k$N$O!"(B |
foozy@708 | 460 (1)$B30It%W%m%;%9$H$7$F$N%U%C%/5/F0$H!"(B |
foozy@708 | 461 (2)Mercurial $B%j%]%8%H%j$X$N%"%/%;%9$K4X$9$kItJ,$G!"(B |
foozy@708 | 462 $B30It%W%m%;%9$N<B9T$=$N$b$N$,DcB.$J$o$1$G$O$"$j$^$;$s!#(B}$B$G$9!#(B |
foozy@708 | 463 |
foozy@708 | 464 Python $B4X?t$K$h$k%W%m%;%9Fb%U%C%/$O!"(B |
foozy@708 | 465 $BA4$F$N(B Mercurial API $B$K%"%/%;%9$G$-!"(B |
foozy@708 | 466 $BB>$N%W%m%;%9$r(B``$B@8@.(B''$B$9$kI,MW$O$"$j$^$;$s$N$G!"(B |
foozy@708 | 467 $B4pK\E*$K30It%U%C%/$h$j$b9bB.$G$9!#(B |
foozy@708 | 468 $B%U%C%/$,I,MW$H$9$kB?$/$N>pJs$NF~<j$b!"(B |
foozy@708 | 469 Mercurial $B%3%^%s%I$+$iF@$k$h$j$b!"(B |
foozy@708 | 470 Mercurial API $B$+$iF@$kJ}$,MF0W$G$9!#(B |
foozy@708 | 471 |
foozy@708 | 472 Python $B$NMxMQ$,6l$K$J$i$J$$$+!"(B |
foozy@708 | 473 $B9b$$<B9T@-G=$,MW5a$5$l$k>l9g!"(B |
foozy@708 | 474 Python $B$G$N%U%C%/<BAu$rA*Br$9$Y$-$G$9!#(B |
foozy@708 | 475 $B$7$+$7$J$,$i!"(B |
foozy@708 | 476 $B4JC1$J%U%C%/$G!"(B |
foozy@708 | 477 $B@-G=$r5$$K$9$kI,MW$,L5$$!J$*$=$i$/B?$/$N%U%C%/$,$=$&$G$9!K$N$G$"$l$P!"(B |
foozy@708 | 478 $B%7%'%k%9%/%j%W%H$G$N<BAu$G==J,$G$9!#(B |
foozy@708 | 479 |
foozy@708 | 480 \subsection{Hook parameters} |
foozy@708 | 481 \label{sec:hook:param} |
foozy@708 | 482 |
foozy@708 | 483 Mercurial $B$,%U%C%/$r5/F0$9$k:]$K$O!"(B |
foozy@708 | 484 $BL@3N$KDj5A$5$l$?%Q%i%a!<%?$,%U%C%/$KEO$5$l$^$9!#(B |
foozy@708 | 485 Python $B$G$N%U%C%/<BAu$N>l9g!"(B |
foozy@708 | 486 $B%Q%i%a!<%?$O%-!<%o!<%I0z?t$H$7$F%U%C%/4X?t$KEO$5$l$^$9!#(B |
foozy@708 | 487 $B30It%W%m%0%i%`$G$N%U%C%/<BAu$N>l9g!"(B |
foozy@708 | 488 $B%Q%i%a!<%?$O4D6-JQ?t$H$7$FEO$5$l$^$9!#(B |
foozy@708 | 489 |
foozy@708 | 490 $B%U%C%/<BAu$,(B Python $B!&%7%'%k%9%/%j%W%H$N$$$:$l$G$"$k$+$G!"(B |
foozy@708 | 491 $B%U%C%/8GM-$N%Q%i%a!<%?L>$H$=$NCM$,7h$^$j$^$9(B\footnote{$BLuCm(B: |
foozy@708 | 492 $B86J8$O(B |
foozy@708 | 493 $B!V(BWhether your hook is written in Python or as a shell script, the |
foozy@708 | 494 hook-specific parameter names and values will be the ``same''$B!W(B} |
foozy@708 | 495 $B??56CM%Q%i%a!<%?$O!"(BPython $B%U%C%/$G$O??56CM7?$H$7$FI=8=$5$l$^$9$,!"(B |
foozy@708 | 496 $B30It%U%C%/$KBP$7$F$O(B ``1''$B!J(B``true'' $BCM$H$7$F!K$J$$$7(B |
foozy@708 | 497 ``0''$B!J(B``false'' $BCM$H$7$F!K$r;}$D4D6-JQ?t$GI=8=$5$l$^$9!#(B |
foozy@708 | 498 $B%U%C%/%Q%i%a!<%?$,(B \texttt{foo} $B$H$$$&L>A0$G$"$k>l9g!"(B |
foozy@708 | 499 Python $B%U%C%/$N%-!<%o!<%I0z?t$NL>A0$b(B \texttt{foo} $B$G$9$,!"(B |
foozy@708 | 500 $B30It%U%C%/$N4D6-JQ?tL>$O(B \texttt{HG\_FOO} $B$H$J$j$^$9!#(B |
foozy@708 | 501 |
foozy@708 | 502 \subsection{Hook return values and activity control} |
foozy@708 | 503 |
foozy@708 | 504 $B<B9T$,@.8y$7$?%U%C%/$O!"30It%U%C%/$N>l9g$O=*N;%3!<%I#0$G!"(B |
foozy@708 | 505 $B%W%m%;%9Fb%U%C%/$N>l9g$O??56CM(B``False''$B$G=*N;$7$J$1$l$P$J$j$^$;$s(B |
foozy@708 | 506 \footnote{$BLuCm(B:Mercurial $B$NG[I[J*$K4^$^$l$k(B hgext $BG[2<$N%U%C%/$O!"(B |
foozy@708 | 507 $B7k9=$J3NN($G!"(B |
foozy@708 | 508 False $BL5$7$N(B return $B$d!"(B |
foozy@708 | 509 $BL@<(E*$J(B return $BL5$7$N<BAu$G$9$,!"(B |
foozy@708 | 510 Python $B$N8@8l;EMM>e!"(B |
foozy@708 | 511 $B$3$l$i$O(B False $B$H(B``$B$[$\Ey2A(B''$B$J(B None $B$H$_$J$5$l$^$9!#(B}$B!#(B |
foozy@708 | 512 $B%U%C%/$N<B9T<:GT$O!"(B |
foozy@708 | 513 $B30It%U%C%/$N>l9g$OHs#0$N=*N;%3!<%I$G!"(B |
foozy@708 | 514 $B%W%m%;%9Fb%U%C%/$N>l9g$O??56CM(B``true''$B$GI=$5$l$^$9!#(B |
foozy@708 | 515 $B%W%m%;%9Fb$U$C$/$,Nc30$rIbMH$7$?>l9g!"(B |
foozy@708 | 516 $B%U%C%/<B9T$O<:GT$7$?$H8+Pv$5$l$^$9!#(B |
foozy@708 | 517 |
foozy@708 | 518 $BA`:n$N7QB3@-$r@)8f$G$-$k%U%C%/$N>l9g!"(B |
foozy@708 | 519 $B#0!?(Bfalse $B$O7QB3$N(B``$B5v2D(B''$B$r!"(B |
foozy@708 | 520 $BHs#0!?(Btrue$B!?Nc30$O(B``$B5qH](B''$B$r0UL#$7$^$9!#(B |
foozy@708 | 521 |
foozy@708 | 522 \subsection{Writing an external hook} |
foozy@708 | 523 |
foozy@708 | 524 \hgrc\ $B%U%!%$%k$K30It%U%C%/$r5-=R$7$?>l9g!"(B |
foozy@708 | 525 \hgrc\ $B%U%!%$%k$K5-=R$7$?%U%C%/$NFbMF$O!"(B |
foozy@708 | 526 $B%7%'%k%W%m%;%9$KEO$5$l!"(B |
foozy@708 | 527 $B$=$N%7%'%k%W%m%;%9$K$h$C$F2r<a$5$l$^$9!#(B |
foozy@708 | 528 $B$3$l$O!"%U%C%/5-=R$NK\BN$K!"(B |
foozy@708 | 529 $BDL>o$N%7%'%k%3%^%s%I%i%$%s$HF1MM$N9=B$$rMQ$$$k$3$H$,$G$-$k!"(B |
foozy@708 | 530 $B$H$$$&$3$H$r0UL#$7$F$$$^$9!#(B |
foozy@708 | 531 |
foozy@708 | 532 $B<B9T2DG=$J%U%C%/$O!"(B |
foozy@708 | 533 $B>o$K%j%]%8%H%j$N%k!<%H%G%#%l%/%H%jD>2<$G<B9T$5$l$^$9!#(B |
foozy@708 | 534 |
foozy@708 | 535 $B8D!9$N%U%C%/%Q%i%a!<%?$O4D6-JQ?t7PM3$GEO$5$l$^$9$,!"(B |
foozy@708 | 536 $B4D6-JQ?tL>$K$O!"(B |
foozy@708 | 537 $BBgJ8;z2=$5$l!"@\F,<-$H$7$F(B``\texttt{HG\_}''$B$,IUM?$5$l$?L>A0$,MQ$$$i$l$^$9!#(B |
foozy@708 | 538 |
foozy@708 | 539 $B%U%C%/%Q%i%a!<%?$rNc30$H$9$l$P!"(B |
foozy@708 | 540 Mercurial $B$O%U%C%/<B9T;~$K4D6-JQ?t$N2~JQ$r9T$$$^$;$s!#(B |
foozy@708 | 541 $B$=$l$>$l$K0[$J$k4D6-JQ?t@_Dj$r$7$F$$$kB?$/$N%f!<%6$K$h$C$F<B9T$5$l$k!"(B |
foozy@708 | 542 $BAH?%A4BN$G6&MQ$5$l$k%U%C%/$r<BAu$9$k:]$K$O!"(B |
foozy@708 | 543 $B$3$NCN<1$,Lr$KN)$D$G$7$g$&!#(B |
foozy@708 | 544 $BJ#?t%f!<%6$K$h$j<B9T$5$l$k>u672<$G$O!"(B |
foozy@708 | 545 $B%U%C%/$N;n834D6-$G@_Dj$5$l$F$$$?4D6-JQ?t$,!"(B |
foozy@708 | 546 $B<B9T;~$K@_Dj$5$l$F$$$k$3$H$r4|BT$7$F$O$$$1$^$;$s!#(B |
foozy@708 | 547 |
foozy@708 | 548 \subsection{Telling Mercurial to use an in-process hook} |
foozy@708 | 549 |
foozy@708 | 550 $B%W%m%;%9Fb%U%C%/$r(B \hgrc\ $B%U%!%$%k$G@_Dj$9$k:]$NJ8K!$O!"(B |
foozy@708 | 551 $B<B9T2DG=%U%C%/(B\footnote{$BLuCm(B: $B!V30It%U%C%/!W$N0U(B |
foozy@708 | 552 }$B@_Dj$N:]$N$=$l$H$O>/!90[$J$j$^$9(B |
foozy@708 | 553 $B%U%C%/@_Dj$O!"(B |
foozy@708 | 554 $B@\F,<-(B``\texttt{python:}''$B$KB3$-!"(B |
foozy@708 | 555 $B%U%C%/$H$7$F;HMQ$9$k8F$S=P$72DG=%*%V%8%'%/%H(B\footnote{$BLuCm(B: |
foozy@708 | 556 callable object}$B$N40A4=$>~$5$l$?L>A0$,5-=R$5$l$F$$$J$1$l$P$J$j$^$;$s!#(B |
foozy@708 | 557 |
foozy@708 | 558 $B%U%C%/Dj5A$,B8:_$9$k%b%8%e!<%k$O!"(B |
foozy@708 | 559 $B%U%C%/<B9T;~$K<+F0E*$K(B import $B$5$l$^$9!#(B |
foozy@708 | 560 $B%b%8%e!<%kL>$H(B \envar{PYTHONPATH} $B@_Dj$,@5$7$1$l$P!"(B |
foozy@708 | 561 $B$-$C$HF0:n$9$kH&$G$9(B\footnote{$BLuCm(B: ``just work'' $B$N%K%e%"%s%9$O!)(B}$B!#(B |
foozy@708 | 562 |
foozy@708 | 563 $B0J2<$K<($9(B \hgrc\ $B%U%!%$%k$N0zMQNc$O!"(B |
foozy@708 | 564 $BA0=R$7$?I=5-$K4X$9$kJ8K!$H0UL#$rNc<($7$F$$$^$9!#(B |
foozy@708 | 565 |
foozy@708 | 566 \begin{codesample2} |
foozy@708 | 567 [hooks] |
foozy@708 | 568 commit.example = python:mymodule.submodule.myhook |
foozy@708 | 569 \end{codesample2} |
foozy@708 | 570 |
foozy@708 | 571 Mercurial $B$,(B \texttt{commit.example} $B%U%C%/$r5/F0$9$k:]$K$O!"(B |
foozy@708 | 572 \texttt{mymodule.submodule} $B$r(B import $B$7!"(B |
foozy@708 | 573 \texttt{myhook} $B$H$$$&L>A0$N8F$S=P$72DG=%*%V%8%'%/%H$rC5$7=P$7$F5/F0$7$^$9!#(B |
foozy@708 | 574 |
foozy@708 | 575 \subsection{Writing an in-process hook} |
foozy@708 | 576 |
foozy@708 | 577 $B0J2<$K<($9:G$bC1=c$J%W%m%;%9Fb%U%C%/$O!"(B |
foozy@708 | 578 $B%U%C%/$H$7$F$O2?$b$7$^$;$s$,!"(B |
foozy@708 | 579 $B%U%C%/(B API $B$N4pK\E*$J35MW$rNc<($G$-$^$9!#(B |
foozy@708 | 580 |
foozy@708 | 581 \begin{codesample2} |
foozy@708 | 582 def myhook(ui, repo, **kwargs): |
foozy@708 | 583 pass |
foozy@708 | 584 \end{codesample2} |
foozy@708 | 585 |
foozy@708 | 586 Python $B%U%C%/(B\footnote{$BLuCm!'%W%m%;%9Fb%U%C%/$N0U(B}$B$N:G=i$N0z?t$O!"(B |
foozy@708 | 587 $B>o$K(B \pymodclass{mercurial.ui}{ui} $B%*%V%8%'%/%H$G$9!#(B |
foozy@708 | 588 $BBh#20z?t$O%j%]%8%H%j%*%V%8%'%/%H$G$9$,!"(B |
foozy@708 | 589 $B8=:_$N(B Mercurial $B$N<BAu$G$O!"(B |
foozy@708 | 590 $B$=$N%$%s%9%?%s%9$O>o$K(B \pymodclass{mercurial.localrepo}{localrepository} $B$G$9!#(B |
foozy@708 | 591 $B$3$l$i$KB3$/$=$NB>$N0z?t$O%-!<%o!<%I0z?t$H$7$FEO$5$l$^$9!#(B |
foozy@708 | 592 $BEO$5$l$kFbMF$O5/F0$5$l$k%U%C%/!J$N<oN`!K$K0MB8$7$^$9$,!"(B |
foozy@708 | 593 $B>e5-Nc$K$*$1$k(B \texttt{**kwargs} $B$N$h$&$K!"(B |
foozy@708 | 594 $B%-!<%o!<%I0z?t<-=q$KMn$H$79~$`(B\footnote{XXXXX: |
foozy@708 | 595 Python $B8GM-$NLu8l$r3NG'(B}$B$3$H$G!"(B |
foozy@708 | 596 $B6=L#$NL5$$0z?t$rL5;k$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 597 |
foozy@708 | 598 \section{Some hook examples} |
foozy@708 | 599 |
foozy@708 | 600 \subsection{Writing meaningful commit messages} |
foozy@708 | 601 |
foozy@708 | 602 $BM-MQ$J%3%_%C%H%a%C%;!<%8$,Hs>o$KC;$$!"(B |
foozy@708 | 603 $B$H$$$&>u67$OA[A|$7Fq$$$b$N$,$"$j$^$9!#(B |
foozy@708 | 604 $B?^(B~\ref{ex:hook:msglen.go} $B$K<($9C1=c$J(B |
foozy@708 | 605 \hook{pretxncommit} $B%U%C%/$O!"(B |
foozy@708 | 606 $B#1#0%P%$%H$h$j$bC;$$%a%C%;!<%8$G$N%A%'%s%8%;%C%H$N%3%_%C%H$rK8$2$^$9!#(B |
foozy@708 | 607 |
foozy@708 | 608 \begin{figure}[ht] |
foozy@708 | 609 \interaction{hook.msglen.go} |
foozy@708 | 610 \caption{A hook that forbids overly short commit messages} |
foozy@708 | 611 \label{ex:hook:msglen.go} |
foozy@708 | 612 \end{figure} |
foozy@708 | 613 |
foozy@708 | 614 \subsection{Checking for trailing whitespace} |
foozy@708 | 615 |
foozy@708 | 616 $B%3%_%C%H$K4X$9$k6=L#?<$$%U%C%/$NMxMQ$O!"(B |
foozy@708 | 617 $Be:No$J%3!<%I$G$N<BAu$rJd=u$9$k$H$$$&$b$N$G$9!#(B |
foozy@708 | 618 $B4JC1$J(B``$Be:No$J%3!<%I(B''$B$NNc$H$7$F$O!"(B |
foozy@708 | 619 $BJQ99$,DI2C$9$k?7$7$$9T$K$O(B``$BKvHx6uGr(B''$B$,4^$^$l$F$$$F$O$J$i$J$$!"(B |
foozy@708 | 620 $B$H$$$&3J8@$,$"$j$^$9!#(B |
foozy@708 | 621 $BKvHx6uGr$H$O!"(B |
foozy@708 | 622 $B6uGrJ8;z$*$h$S%?%V!J(Btab$B!KJ8;z$NO"B3$,9TKv$K$"$k$3$H$r0UL#$7$^$9!#(B |
foozy@708 | 623 $BB?$/$N>l9g!"(B |
foozy@708 | 624 $BKvHx6uGr$OI,MW$NL5$$IT2D;k$N;(2;$_$?$$$J$b$N$G$9$,!"(B |
foozy@708 | 625 $B;~$K$OLdBj$r4^$`$3$H$+$i!"(B |
foozy@708 | 626 $B$=$l$i$,<h$j=|$+$l$k$3$H$rK>$_$^$9!#(B |
foozy@708 | 627 |
foozy@708 | 628 \hook{precommit} $B$H(B \hook{pretxncommit} $B$N$$$:$l$N%U%C%/$G$b!"(B |
foozy@708 | 629 $BKvHx6uGrLdBj$rDLCN$9$k$3$H$,2DG=$G$9!#(B |
foozy@708 | 630 \hook{precommit} $B%U%C%/$r;HMQ$7$?>l9g!"(B |
foozy@708 | 631 $B%U%C%/$O%3%_%C%HBP>]%U%!%$%k$rCN$k$3$H$,$G$-$J$$$N$G!"(B |
foozy@708 | 632 $B%j%]%8%H%jCf$NJQ99$5$l$?%U%!%$%kA4$F$KBP$7$FKvHx6uGr$r3NG'$7$F$7$^$$$^$9!#(B |
foozy@708 | 633 $B$=$&$9$k$H!"(B |
foozy@708 | 634 $B%U%!%$%k(B \filename{foo} $B$NJQ99$N$_$r%3%_%C%H$7$?$$>l9g$G$b!"(B |
foozy@708 | 635 \filename{bar} $B%U%!%$%k$,KvHx6uGr$r4^$s$G$$$?$J$i!"(B |
foozy@708 | 636 \hook{precommit} $B%U%C%/$G$N%A%'%C%/$O!"(B |
foozy@708 | 637 \filename{bar} $B$NLdBj$rM}M3$K(B \filename{foo} $B$N%3%_%C%H$rK8$2$F$7$^$$$^$9!#(B |
foozy@708 | 638 $B$3$l$G$O$$$1$^$;$s!#(B |
foozy@708 | 639 |
foozy@708 | 640 \hook{pretxncommit} $B%U%C%/$G<B8=$9$k>l9g!"(B |
foozy@708 | 641 $B%3%_%C%H$N%H%i%s%6%/%7%g%s$,40N;$9$kD>A0$^$G%A%'%C%/$,9T$o$l$^$;$s!#(B |
foozy@708 | 642 $B$3$N$?$a!"KvHx6uGrLdBj$N3NG'$r!"(B |
foozy@708 | 643 $B87L)$K%3%_%C%HBP>]$N%U%!%$%k$@$1$K9T$&$3$H$,$G$-$^$9!#(B |
foozy@708 | 644 $B$7$+$7!"(B |
foozy@708 | 645 $B%3%_%C%H%a%C%;!<%8$rBPOCE*$KF~NO$7$?8e$G$"$C$F$b!"(B |
foozy@708 | 646 $B%U%C%/$N<B9T$,<:GT(B\footnote{ |
foozy@708 | 647 $BLuCm(B: $BKvHx6uGr$,8!=P$5$l$k$3$H$G$N!V<:GT!W(B}$B$7$?>l9g!"(B |
foozy@708 | 648 $B%H%i%s%6%/%7%g%s$O4,$-La$5$l$F$7$^$$$^$9$N$G!"(B |
foozy@708 | 649 $BKvHx6uGr$r<h$j=|$$$?8e$G:F$S(B \hgcmd{commit} $B%3%^%s%I<B9T$7$?:]$K$O!"(B |
foozy@708 | 650 $B$b$&0lEY%3%_%C%H%a%C%;!<%8$rF~NO$9$kI,MW$,$"$j$^$9!#(B |
foozy@708 | 651 |
foozy@708 | 652 \begin{figure}[ht] |
foozy@708 | 653 \interaction{hook.ws.simple} |
foozy@708 | 654 \caption{A simple hook that checks for trailing whitespace} |
foozy@708 | 655 \label{ex:hook:ws.simple} |
foozy@708 | 656 \end{figure} |
foozy@708 | 657 |
foozy@708 | 658 $B?^(B~\ref{ex:hook:ws.simple} $B$G$O!"(B |
foozy@708 | 659 $BKvHx6uGr$r%A%'%C%/$9$k4JC1$J(B |
foozy@708 | 660 \hook{pretxncommit} $B%U%C%/$r>R2p$7$F$$$^$9!#(B |
foozy@708 | 661 $B$3$N%U%C%/$OC;$$$G$9$,!"Hs>o$KM-MQ$G$9!#(B |
foozy@708 | 662 $BJQ99$K$h$j2?$l$+$N%U%!%$%k$KBP$7$FKvHx6uGr$r4^$`9T$,DI2C$5$l$?>l9g!"(B |
foozy@708 | 663 $B$3$N%U%C%/$O%(%i!<%9%F!<%?%9$G=*N;$7$^$9$,!"(B |
foozy@708 | 664 $BITL{2w$J%U%!%$%k$d9T$NFCDj$rJd=u$9$k>pJs$r2?$iI=<($7$^$;$s(B\footnote{$BLuCm!'(B |
foozy@708 | 665 $B%U%C%/<B9T$N%3%^%s%I%i%$%s$+$i$o$+$k$h$&$K!"(B |
foozy@708 | 666 export $B=PNO!J!a(B patch $B7A<0!K$KBP$7$F(B (e)grep $B$rE,MQ$7$F$$$^$9$+$i!"(B |
foozy@708 | 667 $B%U%!%$%kL>$d9THV9f$KBP$7$F$O2?$iG'<1$5$l$F$$$^$;$s!#(B}$B!#(B |
foozy@708 | 668 $B$3$N%U%C%/$O!"(B |
foozy@708 | 669 $B2~JQ$5$l$F$$$J$$9T$K$OCm0U$rJ'$o$:!"(B |
foozy@708 | 670 $BKvHx6uGrLdBj$r;}$A9~$`9T$K$N$_Cm0U$rJ'$&!"(B |
foozy@708 | 671 $B$H$$$&M%$l$?FC<A$b;}$C$F$$$^$9!#(B |
foozy@708 | 672 |
foozy@708 | 673 \begin{figure}[ht] |
foozy@708 | 674 \interaction{hook.ws.better} |
foozy@708 | 675 \caption{A better trailing whitespace hook} |
foozy@708 | 676 \label{ex:hook:ws.better} |
foozy@708 | 677 \end{figure} |
foozy@708 | 678 |
foozy@708 | 679 $B?^(B~\ref{ex:hook:ws.better} $B$O@h$NNc$h$j$OJ#;($G$9$,!"(B |
foozy@708 | 680 $B$h$jM-MQ$J%U%C%/$NNc$r<($7$F$$$^$9(B\footnote{$BLuCm(B: |
foozy@708 | 681 check\_whitespace.py $B$NFbMF$,ITL@!#(B |
foozy@708 | 682 $B?^Cf$G%=!<%9$r(B cat $B$9$Y$-(B XXXX}$B!#(B |
foozy@708 | 683 $B$3$N%U%C%/$O(B unified diff $B7A<0$r2r@O$7$F!"(B |
foozy@708 | 684 $BKvHx6uGr$rDI2C$9$k9T$NM-L5$rH=Dj$7!"(B |
foozy@708 | 685 $B$=$N$h$&$J%U%!%$%k$NL>A0$H9THV9f$rI=<($7$^$9!#(B |
foozy@708 | 686 $B$=$l$K2C$($F$3$N%U%C%/$O!"(B |
foozy@708 | 687 $B%A%'%s%8%;%C%H$,KvHx6uGr$rDI2C$9$k$3$H$r8!CN$7$?>l9g!"(B |
foozy@708 | 688 $B<B9T$r=*N;$7$F(B Mercurial $B$K%H%i%s%6%/%7%g%s$N4,$-La$7$rEA$($kA0$K!"(B |
foozy@708 | 689 $B%3%_%C%H%a%C%;!<%8$rJ]B8$7$F$=$N%U%!%$%kL>$rI=<($7$^$9$N$G!"(B |
foozy@708 | 690 $BLdBjE@$r=$@5$7$?8e$N%3%_%C%H$N:]$K$O!"(B |
foozy@708 | 691 \hgcmdargs{commit}{\hgopt{commit}{-l}~\emph{filename}} |
foozy@708 | 692 $B$r;H$C$F%3%_%C%H%a%C%;!<%8$r:FMxMQ$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 693 |
foozy@708 | 694 $B?^(B~\ref{ex:hook:ws.better} |
foozy@708 | 695 $B%U%!%$%k$+$iKvHx6uGr$r<h$j=|$/(B |
foozy@708 | 696 \command{perl} $B$N0l9T5-=R$NMQK!$r<($7$^$9!#(B |
foozy@708 | 697 $B$3$NJ}K!$O$3$3$K:F7G$9$k$KB-$k$@$1$N!"(B |
foozy@708 | 698 $B4J7i$5$HM-MQ@-$r;}$C$F$$$^$9(B\footnote{$BLuCm(B: |
foozy@708 | 699 $B%3!<%I$NI=<($,!J(BHTML $B7A<0$@$H!K#29T$KJ,3d$5$l$F$$$k(B XXXX}$B!#(B |
foozy@708 | 700 |
foozy@708 | 701 \begin{codesample2} |
foozy@708 | 702 perl -pi -e 's,\\s+\$,,' filename |
foozy@708 | 703 \end{codesample2} |
foozy@708 | 704 |
foozy@708 | 705 \section{Bundled hooks} |
foozy@708 | 706 |
foozy@708 | 707 Mercurial $B$NG[I[HG$K$O!"4v$D$+$N%U%C%/$,E:IU$5$l$F$$$^$9!#(B |
foozy@708 | 708 $BE:IU%U%C%/$O(B Mercurial $B%=!<%9%D%j!<$N(B |
foozy@708 | 709 \dirname{hgext} $B%G%#%l%/%H%j$K3JG<$5$l$F$$$^$9!#(B |
foozy@708 | 710 Mercurial $B$N%P%$%J%jG[I[HG$r;HMQ$7$F$$$k>l9g$K$O!"(B |
foozy@708 | 711 $B%Q%C%1!<%8$N%$%s%9%H!<%i!<$,(B |
foozy@708 | 712 Mercurial $B$r%$%s%9%H!<%k$7$?0LCV$K$"$k(B |
foozy@708 | 713 \dirname{hgext} $B%G%#%l%/%H%j$K3JG<$5$l$F$$$^$9!#(B |
foozy@708 | 714 |
foozy@708 | 715 \subsection{\hgext{acl}---access control for parts of a repository} |
foozy@708 | 716 |
foozy@708 | 717 \hgext{acl} $B3HD%$K$h$j!"(B |
foozy@708 | 718 $B%M%C%H%o!<%/>e$N%5!<%P$KBP$7$F%A%'%s%8%;%C%H$r(B |
foozy@708 | 719 push $B2DG=$J1s3V%f!<%6$r@)8B$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 720 $B%j%]%8%H%j$N0lIt!JL^O@A4BN$b!K$rJ]8n$9$k$3$H$,$G$-$^$9$N$G!"(B |
foozy@708 | 721 $BFCDj$N%f!<%6$KBP$7$F$O!"(B |
foozy@708 | 722 $BJ]8n$5$l$?ItJ,$K1F6A$r5Z$\$5$J$$%A%'%s%8%;%C%H$N$_$N(B push $B$,2DG=$G$9!#(B |
foozy@708 | 723 |
foozy@708 | 724 $B$3$N3HD%$O(B |
foozy@708 | 725 push $BBP>]$N%A%'%s%8%;%C%H$r%3%_%C%H$7$?%f!<%6(B\emph{$B$G$O$J$/(B}$B!"(B |
foozy@708 | 726 push $B$r<B;\$9$k%f!<%6$N?H85>pJs$r85$K%"%/%;%9@)8f$r9T$$$^$9!#(B |
foozy@708 | 727 $B1s3V%f!<%6$rG'>Z$9$k4F6X!J(Block-downed$B!K%5!<%P$,B8:_$9$k4D6-$G!"(B |
foozy@708 | 728 $BFCDj$N%f!<%6$@$1$,4F6X%5!<%P$X$N%A%'%s%8%;%C%H$N(B |
foozy@708 | 729 push $B$,5v$5$l$k$3$H$r3N<B$K$7$?$$>l9g$G$J$1$l$P!"(B |
foozy@708 | 730 $B$3$N%U%C%/$N;HMQ$O0UL#$,$"$j$^$;$s!#(B |
foozy@708 | 731 |
foozy@708 | 732 \subsubsection{Configuring the \hook{acl} hook} |
foozy@708 | 733 |
foozy@708 | 734 $B;}$A9~$^$l$k%A%'%s%8%;%C%H$r4IM}$9$k$?$a$K!"(B |
foozy@708 | 735 \hgext{acl} $B%U%C%/$O(B |
foozy@708 | 736 \hook{pretxnchangegroup} $B%U%C%/$H$7$FMQ$$$^$9!#(B |
foozy@708 | 737 \hook{pretxnchangegroup} $B%U%C%/$H$7$FMQ$$$i$l$k$3$H$G!"(B |
foozy@708 | 738 $B30Mh$N%A%'%s%8%;%C%H$K$h$jJQ99$5$l$k%U%!%$%k$rCN$k$3$H$,$G$-$k$?$a!"(B |
foozy@708 | 739 ``$B6X;_$5$l$F$$$k(B''$B%U%!%$%k$X$NJQ99$r9T$&%A%'%s%8%;%C%H72$KBP$7$F$O!"(B |
foozy@708 | 740 $B%H%i%s%6%/%7%g%s$N4,$-La$7$,9T$o$l$^$9!#(B |
foozy@708 | 741 |
foozy@708 | 742 \begin{codesample2} |
foozy@708 | 743 [hooks] |
foozy@708 | 744 pretxnchangegroup.acl = python:hgext.acl.hook |
foozy@708 | 745 \end{codesample2} |
foozy@708 | 746 |
foozy@708 | 747 \hgext{acl} $B3HD%$O#3$D$N%;%/%7%g%s$G@_Dj$5$l$^$9!#(B |
foozy@708 | 748 |
foozy@708 | 749 \rcsection{acl} $B%;%/%7%g%s$K$O!"(B |
foozy@708 | 750 $B%U%C%/$,Cm0U$rJ'$&$Y$-30Mh%A%'%s%8%;%C%H$N=P=j$rNs5s$9$k(B |
foozy@708 | 751 \rcitem{acl}{sources} $B%(%s%H%j$@$1$,5-=R$5$l$^$9!#(B |
foozy@708 | 752 $BDL>o$O$3$N%;%/%7%g%s$r@_Dj$9$kI,MW$O$"$j$^$;$s!#(B |
foozy@708 | 753 |
foozy@708 | 754 \begin{description} |
foozy@708 | 755 \item[\rcitem{acl}{serve}] $B%j%b!<%H%j%]%8%H%j$+$i$N(B http $B$J$$$7(B ssh |
foozy@708 | 756 $B7PM3$N%A%'%s%8%;%C%H$KBP$7$F@)8f$r9T$$$^$9!#(B |
foozy@708 | 757 $B$3$l$O(B \rcitem{acl}{sources} $B$N4{DjCM$G!"(B |
foozy@708 | 758 $BDL>o$O$3$N@_Dj9`L\$KBP$7$F9T$&M#0l$N@_Dj$G$9!#(B |
foozy@708 | 759 |
foozy@708 | 760 \item[\rcitem{acl}{pull}] $B%m!<%+%k%j%]%8%H%j$+$i$N(B |
foozy@708 | 761 pull $B7PM3$N%A%'%s%8%;%C%H$KBP$7$F@)8f$r9T$$$^$9!#(B |
foozy@708 | 762 |
foozy@708 | 763 \item[\rcitem{acl}{push}] $B%m!<%+%k%j%]%8%H%j$+$i$N(B |
foozy@708 | 764 push $B7PM3$N%A%'%s%8%;%C%H$KBP$7$F@)8f$r9T$$$^$9!#(B |
foozy@708 | 765 |
foozy@708 | 766 \item[\rcitem{acl}{bundle}] $BB>$N%j%]%8%H%j$+$i$N(B |
foozy@708 | 767 bundle $B7PM3$N%A%'%s%8%;%C%H$KBP$7$F@)8f$r9T$$$^$9!#(B |
foozy@708 | 768 |
foozy@708 | 769 \end{description} |
foozy@708 | 770 |
foozy@708 | 771 \rcsection{acl.allow} $B%;%/%7%g%s$O!"(B |
foozy@708 | 772 $B%j%]%8%H%j$X$N%A%'%s%8%;%C%HDI2C$r5v2D$5$l$F$$$k%f!<%6$r7hDj$7$^$9!#(B |
foozy@708 | 773 $B$3$N%;%/%7%g%s$,B8:_$7$J$$>l9g!"(B |
foozy@708 | 774 $BL@<(E*$K6X;_$5$l$F$$$J$$%f!<%6$O!"(B |
foozy@708 | 775 $BC/$G$b%A%'%s%8%;%C%H$NDI2C$r$G$-$^$9!#(B |
foozy@708 | 776 $B$3$N%;%/%7%g%s$,B8:_$9$k>l9g!"(B |
foozy@708 | 777 $BL@<(E*$K5v2D$5$l$F$$$J$$%f!<%6$O!"(B |
foozy@708 | 778 $BC/$b%A%'%s%8%;%C%H$NDI2C$,$G$-$^$;$s!J(B |
foozy@708 | 779 $B$G$9$N$G!"$3$N%;%/%7%g%s$r6u$K$7$?>l9g!"(B |
foozy@708 | 780 $BA4$F$N%f!<%6$,%A%'%s%8%;%C%H$NDI2C$r6X;_$5$l$^$9!K!#(B |
foozy@708 | 781 |
foozy@708 | 782 \rcsection{acl.deny} $B%;%/%7%g%s$O!"(B |
foozy@708 | 783 $B%j%]%8%H%j$X$N%A%'%s%8%;%C%HDI2C$r6X;_$5$l$F$$$k%f!<%6$r7hDj$7$^$9!#(B |
foozy@708 | 784 $B$3$N%;%/%7%g%s$,5-=R$5$l$J$$>l9g!"(B |
foozy@708 | 785 $BA4$F$N%f!<%6$O%A%'%s%8%;%C%H$NDI2C$r5v2D$5$l$^$9(B\footnote{$BLuCm!'(B |
foozy@708 | 786 $B86J8$O!V(Bno users are denied$B!W$G$9$,!"(B |
foozy@708 | 787 acl.py $B$N<BAu>e$O!V6X;_$7$J$$!W$H!V5v2D!W$OEy2A$G$9!#(B}$B!#(B |
foozy@708 | 788 |
foozy@708 | 789 \rcsection{acl.allow} $B$*$h$S(B \rcsection{acl.deny} |
foozy@708 | 790 $B%;%/%7%g%s$NJ8K!$OF10l$G$9!#(B |
foozy@708 | 791 $B3F%(%s%H%j$N:8JU$O!"(B |
foozy@708 | 792 $B%j%]%8%H%j%k!<%HAjBP$G$N%U%!%$%k$J$$$7%G%#%l%/%H%j$N%^%C%A%s%0%Q%?!<%s$G!"(B |
foozy@708 | 793 $B1&JU$O%f!<%6L>$H$J$C$F$$$^$9!#(B |
foozy@708 | 794 |
foozy@708 | 795 $B0J2<$NNc$G$O!"(B |
foozy@708 | 796 $B%f!<%6(B \texttt{docwriter} $B$,%j%]%8%H%j$N(B |
foozy@708 | 797 \dirname{docs} $BG[2<$KBP$9$kJQ99$N(B |
foozy@708 | 798 push $B$N$_$,5v2D$5$l$F$$$k0lJ}$G!"(B |
foozy@708 | 799 $B%f!<%6(B \texttt{intern} $B$O(B |
foozy@708 | 800 \dirname{source/sensitive} |
foozy@708 | 801 $B0J30$NG$0U$N%G%#%l%/%H%j!&%U%!%$%k$KBP$9$kJQ99$r(B |
foozy@708 | 802 push $B2DG=$G$9(B |
foozy@708 | 803 \footnote{$BLuCm!'(B |
foozy@708 | 804 $B@_Dj$NH=Dj=g=x$O(B (1) $B6X;_(B (2) $B5v2D$N=g=x$G9T$o$l!"(B |
foozy@708 | 805 (1) $B6X;_@_Dj$,$"$j!"Ev3:%f!<%6$N%"%/%;%9$,L@<(E*$K6X;_$5$l$F$$$k>l9g$H!"(B |
foozy@708 | 806 (2) $B5v2D@_Dj$,$"$j!"Ev3:%f!<%6$N%"%/%;%9$,L@<(E*$K5v2D$5$l$F!V$$$J$$!W>l9g$K!"(B |
foozy@708 | 807 $BIT@5%"%/%;%9$H$_$J$5$l!"(B |
foozy@708 | 808 $B$=$l0J30$N>l9g$O%"%/%;%9$,5v2D$5$l$^$9!#(B}$B!#(B |
foozy@708 | 809 |
foozy@708 | 810 \begin{codesample2} |
foozy@708 | 811 [acl.allow] |
foozy@708 | 812 docs/** = docwriter |
foozy@708 | 813 |
foozy@708 | 814 [acl.deny] |
foozy@708 | 815 source/sensitive/** = intern |
foozy@708 | 816 \end{codesample2} |
foozy@708 | 817 |
foozy@708 | 818 \subsubsection{Testing and troubleshooting} |
foozy@708 | 819 |
foozy@708 | 820 \hgext{acl} $B%U%C%/$r;n$7$F$_$?$$>l9g!"(B |
foozy@708 | 821 Mercurial $B$N%G%P%C%0=PNO$rM-8z$K$7$F<B9T$7$^$7$g$&!#(B |
foozy@708 | 822 \hggopt{--debug} $B%*%W%7%g%s$r;XDj$7Fq$$!J$"$k$$$OIT2DG=$J!K(B |
foozy@708 | 823 $B%5!<%P>e$G<B9T$9$k$3$H$b$"$k$G$7$g$&$+$i!"(B |
foozy@708 | 824 $B%5!<%PB&$N(B \hgrc $B%U%!%$%k$G%G%P%C%0=PNO$rM-8z2=$G$-$k$3$H$r$*K:$l$J$/!#(B |
foozy@708 | 825 |
foozy@708 | 826 \begin{codesample2} |
foozy@708 | 827 [ui] |
foozy@708 | 828 debug = true |
foozy@708 | 829 \end{codesample2} |
foozy@708 | 830 |
foozy@708 | 831 $B$3$l$rM-8z$K$9$k$3$H$G!"(B |
foozy@708 | 832 $BEv3:%f!<%6$K$h$k(B push |
foozy@708 | 833 $B$r5v2D!&6X;_$9$kM}M3$rH=CG$9$k$KB-$k>pJs$rI=<($9$k$3$H$G$7$g$&!#(B |
foozy@708 | 834 |
foozy@708 | 835 \subsection{\hgext{bugzilla}---integration with Bugzilla} |
foozy@708 | 836 |
foozy@708 | 837 \hgext{bugzilla} $B3HD%$O!"(B |
foozy@708 | 838 $B%3%_%C%H%a%C%;!<%8$K%P%0(BID$B$r8!CN$7$?:]$K(B |
foozy@708 | 839 Bugzilla $B%P%0$X$N%3%a%s%HDI2C$r9T$$$^$9!#(B |
foozy@708 | 840 $B$3$N%U%C%/$r6&M-%5!<%P$K@_Dj$9$k$3$H$G!"(B |
foozy@708 | 841 $B$3$N%5!<%P$X$N%j%b!<%H$+$i$NJQ99EAGE$N:]$K$O!"(B |
foozy@708 | 842 $B>o$K$3$N%U%C%/$,<B9T$5$l$^$9!#(B |
foozy@708 | 843 |
foozy@708 | 844 $B$3$N%U%C%/$O(B Bugzilla $B%P%0$K!"(B |
foozy@708 | 845 $B0J2<$N$h$&$J%3%a%s%H$rDI2C$7$^$9(B |
foozy@708 | 846 $B!JJ}K!$O8e=R$7$^$9$,!"%3%a%s%HFbMF$OJQ99$G$-$^$9!K!#(B |
foozy@708 | 847 |
foozy@708 | 848 \begin{codesample2} |
foozy@708 | 849 Changeset aad8b264143a, made by Joe User <joe.user@domain.com> in |
foozy@708 | 850 the frobnitz repository, refers to this bug. |
foozy@708 | 851 |
foozy@708 | 852 For complete details, see |
foozy@708 | 853 http://hg.domain.com/frobnitz?cmd=changeset;node=aad8b264143a |
foozy@708 | 854 |
foozy@708 | 855 Changeset description: |
foozy@708 | 856 Fix bug 10483 by guarding against some NULL pointers |
foozy@708 | 857 \end{codesample2} |
foozy@708 | 858 |
foozy@708 | 859 $B$3$N%U%C%/$N2ACM$O!"(B |
foozy@708 | 860 $B%A%'%s%8%;%C%H!J$N%3%_%C%H%a%C%;!<%8!K$,%P%0$r;2>H$7$F$$$k:]$K!"(B |
foozy@708 | 861 $B%P%0>pJs$r99?7$9$k<j=g$r<+F02=$9$kE@$K$"$j$^$9!#(B |
foozy@708 | 862 $B%U%C%/$N@_Dj$rE,@Z$K9T$&$3$H$G!"(B |
foozy@708 | 863 Bugzilla $B%P%0$+$i;2>H85%A%'%s%8%;%C%H$X$H!"(B |
foozy@708 | 864 $B0lD>@~$KE~C#$9$k$3$H$,MF0W$K$J$j$^$9!#(B |
foozy@708 | 865 |
foozy@708 | 866 $B$3$N%U%C%/$N<BAu$rB-3]$j$K$7$F!"(B |
foozy@708 | 867 $B$h$j9bEY$J(B Bugzilla $B$H$NE}9g$r?^$k$3$H$b2DG=$G$9!#(B |
foozy@708 | 868 $BNc$($P(B: |
foozy@708 | 869 |
foozy@708 | 870 \begin{itemize} |
foozy@708 | 871 \item $B%5!<%P$K(B push $B$5$l$kA4$F$N%A%'%s%8%;%C%H$K$O!"(B |
foozy@708 | 872 $B%3%_%C%H%a%C%;!<%8$KE,@Z$J%P%0(B~ID$B$,4^$^$l$F$$$k$3$H$rMW5a(B: |
foozy@708 | 873 $B$3$N>l9g!"(B\hook{pretxncommit} |
foozy@708 | 874 $B%U%C%/$KEv3:>r7o$r8!>Z$9$k%U%C%/$r@_Dj$9$k$N$,NI$$$G$7$g$&!#(B |
foozy@708 | 875 $B%3%_%C%H%a%C%;!<%8$,%P%0(B~ID$B$r4^$^$J$$%A%'%s%8%;%C%H$O!"(B |
foozy@708 | 876 $B%U%C%/$K$h$C$F5qH]$5$l$k$h$&$K$J$j$^$9!#(B |
foozy@708 | 877 |
foozy@708 | 878 \item $B?75,$N%A%'%s%8%;%C%H$KBP$7$F!"(B |
foozy@708 | 879 $B4JC1$J%3%a%s%H$NIUM?$HF1MM$K!"(B |
foozy@708 | 880 $B%P%0$N(B\emph{$B>uBV(B}$B$N<+F0E*$JJQ99$r5v2D(B: |
foozy@708 | 881 $BNc$($P!"(B``fixed bug 31337'' $B$H$$$&%3%_%C%H%a%C%;!<%8$NJ8;zNs$r!"(B |
foozy@708 | 882 $B%P%0(B 31337 $B$N>uBV$N(B ``requires testing'' $B$X$N99?7!"(B |
foozy@708 | 883 $B$HG'<1$5$;$k!"$H$$$C$?3HD%$b9M$($i$l$^$9!#(B |
foozy@708 | 884 |
foozy@708 | 885 \end{itemize} |
foozy@708 | 886 |
foozy@708 | 887 \subsubsection{Configuring the \hook{bugzilla} hook} |
foozy@708 | 888 \label{sec:hook:bugzilla:config} |
foozy@708 | 889 |
foozy@708 | 890 \hook{bugzilla} $B%U%C%/$O!"(B |
foozy@708 | 891 $B%5!<%PB&$N(B \hgrc\ $BCf$G(B \hook{incoming} $B%U%C%/$H$7$F@_Dj$7$J$1$l$P$J$j$^$;$s!#(B |
foozy@708 | 892 |
foozy@708 | 893 \begin{codesample2} |
foozy@708 | 894 [hooks] |
foozy@708 | 895 incoming.bugzilla = python:hgext.bugzilla.hook |
foozy@708 | 896 \end{codesample2} |
foozy@708 | 897 |
foozy@708 | 898 $B5!G=FC2=$5$l$?%U%C%/$N@-<A$H!"(B |
foozy@708 | 899 Bugzilla $B$,85!9$3$N<o$NE}9g$rG0F,$KCV$$$F$$$J$$$3$H$+$i!"(B |
foozy@708 | 900 $B$3$N%U%C%/$N@_Dj$O2?$+$HJ#;($K$J$j$^$9!#(B |
foozy@708 | 901 |
foozy@708 | 902 $B%U%C%/$N@_Dj$K@hN)$C$F!"(B |
foozy@708 | 903 $B%U%C%/$,<B9T$5$l$k%[%9%H!J72!K$KBP$7$F!"(B |
foozy@708 | 904 MySQL $B$N(B Python $B%P%$%s%G%#%s%0$r%$%s%9%H!<%k$7$F$/$@$5$$!#(B |
foozy@708 | 905 $BBP>]%[%9%H$K$*$$$F%P%$%J%j%Q%C%1!<%8$,8+Ev$?$i$J$$>l9g!"(B |
foozy@708 | 906 \cite{web:mysql-python} $B$+$i%@%&%s%m!<%I$G$-$^$9!#(B |
foozy@708 | 907 |
foozy@708 | 908 $B%U%C%/$N@_Dj$O!"(B |
foozy@708 | 909 \hgrc\ $B%U%!%$%k$N(B |
foozy@708 | 910 \rcsection{bugzilla} $B%;%/%7%g%s$K5-=R$5$l$^$9!#(B |
foozy@708 | 911 |
foozy@708 | 912 \begin{description} |
foozy@708 | 913 |
foozy@708 | 914 \item[\rcitem{bugzilla}{version}] $B%5!<%P$K%$%s%9%H!<%k$5$l$F$$$k(B |
foozy@708 | 915 Bugzilla $B$N%P!<%8%g%s!#(B |
foozy@708 | 916 Bugzilla $B$N%G!<%?%Y!<%9%9%-!<%^$O;~@^JQ99$5$l$^$9$N$G!"(B |
foozy@708 | 917 $B$I$N%9%-!<%^$,;HMQ$5$l$F$$$k$N$+$r87L)$KCN$C$F$$$kI,MW$,$"$j$^$9!#(B |
foozy@708 | 918 $B:#$N$H$3$m!"%5%]!<%HBP>]$O(B \texttt{2.16} $B$N$_$G$9!#(B |
foozy@708 | 919 |
foozy@708 | 920 \item[\rcitem{bugzilla}{host}] Bugzilla $B$N%G!<%?$,3JG<$5$l$F$$$k(B |
foozy@708 | 921 MySQL $B%5!<%P$,2TF0$7$F$$$k%[%9%HL>!#(B |
foozy@708 | 922 MySQL $B%5!<%P$O!"(B\hook{bugzilla} $B%U%C%/$,<B9T$5$l$kA4$F$N%[%9%H$KBP$7$F!"(B |
foozy@708 | 923 $B@\B3$r5v2D$7$F$$$kI,MW$,$"$j$^$9!#(B |
foozy@708 | 924 |
foozy@708 | 925 \item[\rcitem{bugzilla}{user}] MySQL $B%5!<%P$X$N@\B3;~$K;HMQ$9$k%f!<%6L>!#(B |
foozy@708 | 926 MySQL $B%5!<%P$O!"(B\hook{bugzilla} $B%U%C%/$,<B9T$5$l$kA4$F$N%[%9%H$KBP$7$F!"(B |
foozy@708 | 927 $B$3$N%f!<%6L>$G$N@\B3$r5v2D$7$F$$$kI,MW$,$"$j$^$9!#(B |
foozy@708 | 928 $B$3$N%f!<%6$O!"(B |
foozy@708 | 929 Bugzilla $B$,;HMQ$9$k%F!<%V%k$KBP$7$FFI$_<h$j!&JQ99$NN>J}$N8"8B$,I,MW$G$9!#(B |
foozy@708 | 930 $B$3$N9`L\$N4{DjCM$O!"(B |
foozy@708 | 931 MySQL $B%5!<%P$K$*$1$k(B Bugzilla $B$NI8=`E*$J%f!<%6L>$G$"$k(B |
foozy@708 | 932 \texttt{bugs} $B$G$9!#(B |
foozy@708 | 933 |
foozy@708 | 934 \item[\rcitem{bugzilla}{password}] $B>e5-%f!<%6$N(B |
foozy@708 | 935 MySQL $B%5!<%P$K$*$1$k%Q%9%o!<%I!#(B |
foozy@708 | 936 $B$3$NCM$OJ?J8$G3JG<$5$l$k$?$a!"(B |
foozy@708 | 937 $B8"8B$r;}$?$J$$%f!<%6$,$3$N>pJs$N=q$+$l$?(B \hgrc |
foozy@708 | 938 $B%U%!%$%k$rGA$/$3$H$,L5$$$h$&$K$7$J$1$l$P$J$j$^$;$s!#(B |
foozy@708 | 939 |
foozy@708 | 940 \item[\rcitem{bugzilla}{db}] MySQL $B%5!<%P$K$*$1$k(B |
foozy@708 | 941 Bugzilla $B%G!<%?%Y!<%9$NL>A0!#(B |
foozy@708 | 942 $B$3$N9`L\$N4{DjCM$O!"(B |
foozy@708 | 943 MySQL $B%5!<%P$K$*$1$k(B Bugzilla $B$NI8=`E*$J%G!<%?%Y!<%9L>$G$"$k(B |
foozy@708 | 944 \texttt{bugs} $B$G$9!#(B |
foozy@708 | 945 |
foozy@708 | 946 \item[\rcitem{bugzilla}{notify}] $B%U%C%/$K$h$k%P%0$X$N%3%a%s%HIUM?;~$K!"(B |
foozy@708 | 947 Bugzilla $B$K$h$k9XFI<T$X$NEE;R%a!<%kDLCN$r<B;\$7$?$$>l9g!"(B |
foozy@708 | 948 $B%G!<%?%Y!<%9$r99?7$9$kKh$K%3%^%s%I$r<B9T$5$;$kI,MW$,$"$j$^$9!#(B |
foozy@708 | 949 $B<B9T$9$k%3%^%s%I$O(B Bugzilla $B$N%$%s%9%H!<%k>l=j$K0MB8$7$^$9$,!"(B |
foozy@708 | 950 \dirname{/var/www/html/bugzilla} $B$K%$%s%9%H!<%k$7$?$H$9$k$H!"(B |
foozy@708 | 951 $BDL>o$O0J2<$N$h$&$K$J$j$^$9!#(B |
foozy@708 | 952 |
foozy@708 | 953 \begin{codesample4} |
foozy@708 | 954 cd /var/www/html/bugzilla && ./processmail %s nobody@nowhere.com |
foozy@708 | 955 \end{codesample4} |
foozy@708 | 956 |
foozy@708 | 957 Bugzilla $B$N(B \texttt{processmail} $B%W%m%0%i%`$O!"(B |
foozy@708 | 958 $B%P%0(B~ID$B!J%U%C%/$K$h$j(B ``\texttt{\%s}'' $B$,(B $B%P%0(B~ID $B$KCV49$5$l$^$9!K$H!"(B |
foozy@708 | 959 $BEE;R%a!<%k%"%I%l%9$rI,MW$H$7$^$9!#(B |
foozy@708 | 960 $B$3$N%W%m%0%i%`$O!"(B |
foozy@708 | 961 $B<B9T;~%G%#%l%/%H%j$X$N%U%!%$%k=q$-=P$7$N8"8B$bI,MW$H$7$^$9!#(B |
foozy@708 | 962 Bugzilla $B$H%U%C%/$,F1$8%5!<%P>e$K%$%s%9%H!<%k$5$l$F$$$J$$>l9g!"(B |
foozy@708 | 963 Bugzilla $B$,%$%s%9%H!<%k$5$l$F$$$k%5!<%P>e$G(B |
foozy@708 | 964 \texttt{processmail} $B$r5/F0$9$kJ}K!$r8+$D$1=P$9I,MW$,$"$j$^$9!#(B |
foozy@708 | 965 |
foozy@708 | 966 \end{description} |
foozy@708 | 967 |
foozy@708 | 968 \subsubsection{Mapping committer names to Bugzilla user names} |
foozy@708 | 969 |
foozy@708 | 970 $B4{Dj>uBV$N(B \hgext{bugzilla} $B%U%C%/$O!"(B |
foozy@708 | 971 $B%A%'%s%8%;%C%H$r%3%_%C%H$7$?%f!<%6$NEE;R%a!<%k%"%I%l%9$r!"(B |
foozy@708 | 972 $B%P%0$N99?7$r9T$&(B Bugzilla $B%f!<%6L>$H$7$F;HMQ$9$k$3$H$r;n$_$^$9!#(B |
foozy@708 | 973 $B$3$N5sF0$,>u67$KB($5$J$$>l9g!"(B |
foozy@708 | 974 \rcsection{usermap} $B%;%/%7%g%s$r;HMQ$7$F!"(B |
foozy@708 | 975 $B%A%'%s%8%;%C%H$r%3%_%C%H$7$?%f!<%6$NEE;R%a!<%k%"%I%l%9$r(B |
foozy@708 | 976 Bugzilla $B$N%f!<%6L>$KJQ49$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 977 |
foozy@708 | 978 \rcsection{usermap} $B%;%/%7%g%s$N8D!9$NMWAG$O!"(B |
foozy@708 | 979 $B:8JU$KEE;R%a!<%k%"%I%l%9!"(B |
foozy@708 | 980 $B1&JU$K(B Bugzilla $B%f!<%6L>$rJ];}$7$^$9!#(B |
foozy@708 | 981 |
foozy@708 | 982 \begin{codesample2} |
foozy@708 | 983 [usermap] |
foozy@708 | 984 jane.user@example.com = jane |
foozy@708 | 985 \end{codesample2} |
foozy@708 | 986 |
foozy@708 | 987 $BDL>o$N(B \hgrc $B%U%!%$%k$K(B |
foozy@708 | 988 \rcsection{usermap} $B%G!<%?$rD>@\J];}$9$k$3$H$b$G$-$^$9$,!"(B |
foozy@708 | 989 \hgext{bugzilla} $B%U%C%/$K30It$N(B |
foozy@708 | 990 \filename{usermap} $B%U%!%$%k$+$i>pJs$rFI$_9~$`$h$&$K;X<($9$k$3$H$b$G$-$^$9!#(B |
foozy@708 | 991 $B8e<T$N>l9g!"Nc$($P(B \filename{usermap} $B%G!<%?$=$N$b$N$r!"(B |
foozy@708 | 992 $BMxMQ<T$,2~JQ2DG=$J%j%]%8%H%j$K3JG<$9$k$3$H$b$G$-$^$9!#(B |
foozy@708 | 993 $B$=$&$9$k$3$H$G!"(B |
foozy@708 | 994 $BMxMQ<T<+?H$,(B |
foozy@708 | 995 \rcitem{bugzilla}{usermap} $BCf$N3F<+$NMWAG$rJ]<i$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 996 $B$3$N>l9g$N(B \hgrc\ $B%U%!%$%k$O0J2<$N$h$&$K5-=R$5$l$^$9!#(B |
foozy@708 | 997 |
foozy@708 | 998 \begin{codesample2} |
foozy@708 | 999 # $BDL>o$N(B hgrc $B%U%!%$%k$O(B usermap $B30It%U%!%$%k$r;2>H(B |
foozy@708 | 1000 [bugzilla] |
foozy@708 | 1001 usermap = /home/hg/repos/userdata/bugzilla-usermap.conf |
foozy@708 | 1002 \end{codesample2} |
foozy@708 | 1003 |
foozy@708 | 1004 \filename{usermap} $B$,;2>H$9$k%U%!%$%k$NFbMF$O!"(B |
foozy@708 | 1005 $B0J2<$N$h$&$K$J$j$^$9!#(B |
foozy@708 | 1006 |
foozy@708 | 1007 \begin{codesample2} |
foozy@708 | 1008 # bugzilla-usermap.conf $B$O(B hg $B%j%]%8%H%jFb$KG[CV(B |
foozy@708 | 1009 [usermap] |
foozy@708 | 1010 stephanie@example.com = steph |
foozy@708 | 1011 \end{codesample2} |
foozy@708 | 1012 |
foozy@708 | 1013 \subsubsection{Configuring the text that gets added to a bug} |
foozy@708 | 1014 |
foozy@708 | 1015 Mercurial $B$N%F%s%W%l!<%H7A<0$G5-=R$9$k$3$H$G!"(B |
foozy@708 | 1016 \hgext{bugzilla} $B%U%C%/$,DI2C$9$k%3%a%s%H$NFbMF$r@_Dj$9$k$3$H$,2DG=$G$9!#(B |
foozy@708 | 1017 $B4v$D$+$N!J(B\rcsection{bugzilla} $B%;%/%7%g%s$K$*$1$k!K(B \hgrc\ $BMWAG$K$h$j!"(B |
foozy@708 | 1018 $B!J%F%s%W%l!<%H$N!)!K?6$kIq$$$r@)8f$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 1019 |
foozy@708 | 1020 \begin{description} |
foozy@708 | 1021 \item[\texttt{strip}] URL $B$K$*$1$kItJ,%Q%9L>!J(Ba |
foozy@708 | 1022 partial path for a URL$B!K$r@8@.$9$k:]$K!"(B |
foozy@708 | 1023 $B%j%]%8%H%j$K$*$1$k%Q%9L>$+$i<h$j=|$/%Q%9MWAG$N?t$r;XDj$7$^$9!#(B |
foozy@708 | 1024 $BNc$($P!"%5!<%P$K$*$1$k%j%]%8%H%j72$,(B \dirname{/home/hg/repos} $BG[2<$K$"$j!"(B |
foozy@708 | 1025 \dirname{/home/hg/repos/app/tests} $B$N%j%]%8%H%j$rBP>]$H$9$k>l9g!"(B |
foozy@708 | 1026 \texttt{strip} $B$r(B \texttt{4} $B$H$9$k$3$H$G!"(B |
foozy@708 | 1027 \dirname{app/tests} $B$H$$$&ItJ,%Q%9$rF@$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 1028 \hgext{bugzilla} $B%U%C%/$O$3$NItJ,%Q%9L>$r!"(B |
foozy@708 | 1029 $B%F%s%W%l!<%H$NE,MQ$N:]$K(B \texttt{webroot} $B$H$$$&L>A0$GMxMQ2DG=$K$7$^$9!#(B |
foozy@708 | 1030 |
foozy@708 | 1031 \item[\texttt{template}] $B;HMQ$9$k%F%s%W%l!<%H%F%-%9%H$r;XDj$7$^$9!#(B |
foozy@708 | 1032 $BDL>o$N%A%'%s%8%;%C%H4XO"$NCV49$K2C$($F!"(B |
foozy@708 | 1033 $B$3$N%F%s%W%l!<%H$G$O(B \texttt{hgweb}$B!J8e=RNc$K$"$k$h$&$K(B |
foozy@708 | 1034 \texttt{hgweb} $B9`L\$G@_Dj$7$^$9!K(B |
foozy@708 | 1035 $B$*$h$S(B \texttt{webroot}$B!JA0=R$N$h$&$K(B |
foozy@708 | 1036 \texttt{strip} $B$K$h$C$F@8@.$5$l$k%Q%9$G$9!K$,;HMQ$G$-$^$9!#(B |
foozy@708 | 1037 |
foozy@708 | 1038 \end{description} |
foozy@708 | 1039 |
foozy@708 | 1040 $B$3$l$i$K2C$($F!"(B |
foozy@708 | 1041 \hgrc\ $B%U%!%$%k$N(B \rcsection{web} $B%;%/%7%g%s$K(B |
foozy@708 | 1042 \rcitem{web}{baseurl} $B9`L\$rDI2C$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 1043 Bugzilla $B%3%a%s%H$+$i$N%A%'%s%8%;%C%H;2>H$K;HMQ$9$k%j%s%/$N(B |
foozy@708 | 1044 URL $B$r9=C[$9$k:]$N4pDlJ8;zNs$H$7$F(B |
foozy@708 | 1045 \hgext{bugzilla} $B%U%C%/$O%F%s%W%l!<%HE83+$N:]$K$3$NCM$r;HMQ$7$^$9!#(B |
foozy@708 | 1046 $BNc$($P!'(B |
foozy@708 | 1047 |
foozy@708 | 1048 \begin{codesample2} |
foozy@708 | 1049 [web] |
foozy@708 | 1050 baseurl = http://hg.domain.com/ |
foozy@708 | 1051 \end{codesample2} |
foozy@708 | 1052 |
foozy@708 | 1053 \hgext{bugzilla} $B%U%C%/$N@_DjNc$r0J2<$K<($7$^$9(B\footnote{$BLuCm(B: |
foozy@708 | 1054 $B86J8$N(B ``\\n'' $B$,@5$7$/5!G=$7$F$$$J$$$?$a!"(B |
foozy@708 | 1055 $BNc<($N%l%$%"%&%H$,Mp$l$F$$$k(B}$B!#(B |
foozy@708 | 1056 |
foozy@708 | 1057 \begin{codesample2} |
foozy@708 | 1058 [bugzilla] |
foozy@708 | 1059 host = bugzilla.example.com |
foozy@708 | 1060 password = mypassword |
foozy@708 | 1061 version = 2.16 |
foozy@708 | 1062 # $B%5!<%PB&%j%]%8%H%j$O(B /home/hg/repos $B$K$"$k$?$a!"(B |
foozy@708 | 1063 # $BKAF,$N(B 4 $B$D$N%;%Q%l!<%?(B\footnote{$BLuCm(B: $B%Q%96h@Z$j(B ``/''}$B$r=|30(B |
foozy@708 | 1064 strip = 4 |
foozy@708 | 1065 hgweb = http://hg.example.com/ |
foozy@708 | 1066 usermap = /home/hg/repos/notify/bugzilla.conf |
foozy@708 | 1067 template = Changeset \{node|short\}, made by \{author\} in the \{webroot\} |
foozy@708 | 1068 repo, refers to this bug.\\nFor complete details, see |
foozy@708 | 1069 \{hgweb\}\{webroot\}?cmd=changeset;node=\{node|short\}\\nChangeset |
foozy@708 | 1070 description:\\n\\t\{desc|tabindent\} |
foozy@708 | 1071 \end{codesample2} |
foozy@708 | 1072 |
foozy@708 | 1073 \subsubsection{Testing and troubleshooting} |
foozy@708 | 1074 |
foozy@708 | 1075 \hgext{bugzilla} $B%U%C%/@_Dj$K$*$$$F:G$bNI$/$"$kLdBj$O!"(B |
foozy@708 | 1076 Bugzilla $B$N(B \filename{processmail} $B%9%/%j%W%H<B9T$K4X$9$k$b$N$H!"(B |
foozy@708 | 1077 $B%3%_%C%H%f!<%6L>$+$i(B Bugzilla $B%f!<%6L>$X$NJQ49$K4X$9$k$b$N$G$9!#(B |
foozy@708 | 1078 |
foozy@708 | 1079 $B@h$N(B \ref{sec:hook:bugzilla:config}~$B@a$+$i$N@bL@$G=R$Y$?$h$&$K!"(B |
foozy@708 | 1080 Mercurial $B%W%m%;%9$r%5!<%P$G<B9T$9$k%f!<%6$,!"(B |
foozy@708 | 1081 \filename{processmail} $B%9%/%j%W%H$r<B9T$9$k%f!<%6$G$b$"$j$^$9!#(B |
foozy@708 | 1082 \filename{processmail} $B%9%/%j%W%H$O(B |
foozy@708 | 1083 Bugzilla $B$,@_Dj%G%#%l%/%H%jCf$N%U%!%$%k$K2?$i$+$N>pJs$r=q$-=P$97@5!$H$J$k$?$a!"(B |
foozy@708 | 1084 $BDL>o(B Bugzilla $B$N@_Dj%U%!%$%k$O(B |
foozy@708 | 1085 Bugzilla $B$,F0:n$9$k%&%'%V%5!<%P$N<B9T<T$N8"8B2<$K$"$j$^$9!#(B |
foozy@708 | 1086 |
foozy@708 | 1087 \filename{processmail} $B<B9T$N:]$K$O!"(B |
foozy@708 | 1088 \command{sudo} $B%3%^%s%I$rMxMQ$9$k$J$I$7$FE,@Z$J%f!<%68"8B$G<B9T$7$^$7$g$&!#(B |
foozy@708 | 1089 \filename{sudoers} $B%U%#%k$N@_DjNc$r0J2<$K<($7$^$9!#(B |
foozy@708 | 1090 |
foozy@708 | 1091 \begin{codesample2} |
foozy@708 | 1092 hg_user = (httpd_user) NOPASSWD: /var/www/html/bugzilla/processmail-wrapper %s |
foozy@708 | 1093 \end{codesample2} |
foozy@708 | 1094 |
foozy@708 | 1095 $B$3$NNc$G$O!"(B\texttt{hg\_user} $B%f!<%6$O!"(B |
foozy@708 | 1096 \filename{processmail-wrapper} $B%W%m%0%i%`$r(B |
foozy@708 | 1097 \texttt{httpd\_user} $B%f!<%6$N8"8B2<$G<B9T$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 1098 |
foozy@708 | 1099 \filename{processmail} $B%W%m%0%i%`$O(B |
foozy@708 | 1100 Bugzilla $B$r%$%s%9%H!<%k$7$?%G%#%l%/%H%jD>2<$G$N<B9T$,I,MW$G$9$,!"(B |
foozy@708 | 1101 \filename{sudoers} $B%U%!%$%k$K$O$=$N$h$&$J@)Ls$r5-=R$9$k$3$H$,$G$-$J$$$N$G!"(B |
foozy@708 | 1102 $B$3$N$h$&$J4V@\<B9T$N$?$a$N%i%C%Q!<%9%/%j%W%H$,I,MW$H$J$j$^$9!#(B |
foozy@708 | 1103 $B%i%C%Q!<%9%/%j%W%H$NFbMF$O0J2<$N$h$&$K4JC1$J$b$N$G$9!#(B |
foozy@708 | 1104 |
foozy@708 | 1105 \begin{codesample2} |
foozy@708 | 1106 #!/bin/sh |
foozy@708 | 1107 cd `dirname $0` && ./processmail "$1" nobody@example.com |
foozy@708 | 1108 \end{codesample2} |
foozy@708 | 1109 |
foozy@708 | 1110 \filename{processmail} |
foozy@708 | 1111 $B$K;XDj$9$kEE;R%a!<%k%"%I%l%9$O!"(B |
foozy@708 | 1112 $B$I$N$h$&$J$b$N$G$b9=$$$^$;$s!#(B |
foozy@708 | 1113 |
foozy@708 | 1114 \rcsection{usermap} $B$,@5$7$/@_Dj$5$l$F$$$J$$>l9g!"(B |
foozy@708 | 1115 $B%A%'%s%8%;%C%H$r%5!<%P$K(B push $B$7$?:]$K(B |
foozy@708 | 1116 \hgext{bugzilla} $B%U%C%/$K$h$j%(%i!<%a%C%;!<%8$,I=<($5$l$^$9!#(B |
foozy@708 | 1117 $B%(%i!<%a%C%;!<%8$O0J2<$N$h$&$J$b$N$G$9!#(B |
foozy@708 | 1118 |
foozy@708 | 1119 \begin{codesample2} |
foozy@708 | 1120 cannot find bugzilla user id for john.q.public@example.com |
foozy@708 | 1121 \end{codesample2} |
foozy@708 | 1122 |
foozy@708 | 1123 $B$3$N%a%C%;!<%8$O!"(B |
foozy@708 | 1124 $B%3%_%C%H$7$?%f!<%6$NEE;R%a!<%k%"%I%l%9(B |
foozy@708 | 1125 \texttt{john.q.public@example.com} |
foozy@708 | 1126 $B$,M-8z$J(B Bugzilla $B%f!<%6L>$G$O$J$$$+!"(B |
foozy@708 | 1127 \texttt{john.q.public@example.com} |
foozy@708 | 1128 $B$rM-8z$J(B Bugzilla $B%f!<%6L>$KJQ49$9$k%(%s%H%j$,(B |
foozy@708 | 1129 rcsection{usermap} $B$K5-=R$5$l$F$$$J$$$3$H$r0UL#$7$^$9!#(B |
foozy@708 | 1130 |
foozy@708 | 1131 \subsection{\hgext{notify}---send email notifications} |
foozy@708 | 1132 |
foozy@708 | 1133 Mercurial $B$NAH$_9~$_%&%'%V%5!<%P$K$h$j!"(B |
foozy@708 | 1134 $BA4$F$N%j%]%8%H%j$KBP$7$F%A%'%s%8%;%C%H>pJs$N(B RSS $BG[?.5!G=$,Ds6!$5$l$^$9$,!"(B |
foozy@708 | 1135 $BEE;R%a!<%k$K$h$kJQ99DLCN$,A*Br$5$l$k>l9g$,B?$$$G$9!#(B |
foozy@708 | 1136 \hgext{notify} $B%U%C%/$O!"(B |
foozy@708 | 1137 $B9XFI<T$,6=L#$r;}$D?7$?$J%A%'%s%8%;%C%H$4$H$K!"(B |
foozy@708 | 1138 $BEE;R%a!<%k%"%I%l%9!J72!K$K08$F$FDLCN$r9T$$$^$9!#(B |
foozy@708 | 1139 |
foozy@708 | 1140 \hgext{notify} $B$O%F%s%W%l!<%H6nF07?$N%U%C%/$G$9$N$G!"(B |
foozy@708 | 1141 \hgext{bugzilla} $B%U%C%/$HF1MM$K!"(B |
foozy@708 | 1142 $BAw?.$5$l$kDLCN$NFbMF$r%+%9%?%^%$%:$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 1143 |
foozy@708 | 1144 $B4{Dj>uBV$G$O(B |
foozy@708 | 1145 \hgext{notify} $B%U%C%/$O%A%'%s%8%;%C%H$4$H$N:9J,>pJs$r<h$j9~$_$^$9$,!"(B |
foozy@708 | 1146 $B:9J,>pJs$NNL$r@)8B$7$?$j!"(B |
foozy@708 | 1147 $B$3$N5!G=$r40A4$KDd;_$9$k$3$H$b$G$-$^$9!#(B |
foozy@708 | 1148 $B9XFI<T$K$h$kJQ99$NB(;~%l%S%e!<$rA[Dj$9$k>l9g!"(B |
foozy@708 | 1149 $B;XDj$5$l$?(B URL $B$r%/%j%C%/$9$k$h$j$b!"(B |
foozy@708 | 1150 $B:9J,>pJs$r<h$j9~$`$[$&$,M-MQ$G$9!#(B |
foozy@708 | 1151 |
foozy@708 | 1152 \subsubsection{Configuring the \hgext{notify} hook} |
foozy@708 | 1153 |
foozy@708 | 1154 \hgext{notify} $B%U%C%/$O!"(B |
foozy@708 | 1155 $B?7$?$J%A%'%s%8%;%C%H$4$H$K#1DL$NEE;R%a!<%k$rAw?.$9$k$3$H$b$G$-$l$P!"(B |
foozy@708 | 1156 $B!JC1FH$N(B \hgcmd{pull} $B$J$$$7(B \hgcmd{push} $B$K$h$j%j%]%8%H%j$KDI2C$5$l$k(B |
foozy@708 | 1157 $B!K?7$?$J%A%'%s%8%;%C%H72$4$H$KAw?.$9$k$3$H$b$G$-$^$9!#(B |
foozy@708 | 1158 |
foozy@708 | 1159 \begin{codesample2} |
foozy@708 | 1160 [hooks] |
foozy@708 | 1161 # $B%A%'%s%8%;%C%H72$4$H$K#1DL$N%a!<%k$rAw?.(B |
foozy@708 | 1162 changegroup.notify = python:hgext.notify.hook |
foozy@708 | 1163 # $B%A%'%s%8%;%C%H$4$H$K#1DL$N%a!<%k$rAw?.(B |
foozy@708 | 1164 incoming.notify = python:hgext.notify.hook |
foozy@708 | 1165 \end{codesample2} |
foozy@708 | 1166 |
foozy@708 | 1167 $B$3$N%U%C%/$N@_Dj>pJs$O!"(B |
foozy@708 | 1168 \hgrc\ $B%U%!%$%k$N(B |
foozy@708 | 1169 \rcsection{notify} $B%;%/%7%g%s$K5-=R$5$l$^$9!#(B |
foozy@708 | 1170 |
foozy@708 | 1171 \begin{description} |
foozy@708 | 1172 \item[\rcitem{notify}{test}] $B4{Dj>uBV$G$O!"(B |
foozy@708 | 1173 $B$3$N%U%C%/$OA4$/%a!<%k$rAw?.$7$^$;$s!#(B |
foozy@708 | 1174 $B$=$NBX$o$j!"Aw?.$9$k(B\emph{$B$G$"$m$&(B}$B%a%C%;!<%8$rI=<($7$^$9!#(B |
foozy@708 | 1175 $B$3$N9`L\$r(B \texttt{false} $B$K$9$k$3$H$GEE;R%a!<%k$,Aw?.$5$l$k$h$&$K$J$j$^$9!#(B |
foozy@708 | 1176 $B4pDl>uBV$GEE;R%a!<%k$NAw?.$,Dd;_$5$l$F$$$k$N$O!"(B |
foozy@708 | 1177 $B$3$N3HD%!J!?%U%C%/!K$r$-$A$s$H@_Dj$9$k$N$K$O4vJ,$+$N;n9T:x8m$,I,MW$J$N$G!"(B |
foozy@708 | 1178 $B@_Dj;n9TCf$K(B``$B2u$l$?(B''$BDLCN$r9XFI<T$KAw?.$7$F$7$^$&$?$a$G$9!#(B |
foozy@708 | 1179 |
foozy@708 | 1180 \item[\rcitem{notify}{config}] $B9XFI>pJs$rJ];}$7$F$$$k@_Dj%U%!%$%k$X$N%Q%9!#(B |
foozy@708 | 1181 $B$3$N>pJs$O(B \hgrc\ $B$H$OJ,N%$5$l$F$$$k$N$G!"(B |
foozy@708 | 1182 $B$3$N%U%!%$%k$=$N$b$N$rBP>]%j%]%8%H%j$G4IM}$9$k$3$H$b2DG=$G$9!#(B |
foozy@708 | 1183 $B$3$&$9$k$3$H$G!"(B |
foozy@708 | 1184 $BBP>]%j%]%8%H%j$rJ#@=$7!"9XFI@_Dj$r99?7$7$?>e$G!"(B |
foozy@708 | 1185 $BJQ99$r%5!<%P$K(B \hgcmd{push} $B$GLa$9$3$H$,$G$-$^$9!#(B |
foozy@708 | 1186 |
foozy@708 | 1187 \item[\rcitem{notify}{strip}] $B%j%]%8%H%j$KBP$9$k9XFI<T$NM-L5$rH=Dj$9$k:]$K!"(B |
foozy@708 | 1188 $B%j%]%8%H%j$N%Q%9KAF,$+$i<h$j=|$/%Q%96h@Z$j$N?t(B\footnote{$BLuCm(B: |
foozy@708 | 1189 $B$3$3$G$O(B strip $BBP>]$r(B |
foozy@708 | 1190 ``leading path separator characters'' $B$HI=8=$7$F$$$k$,!"(B |
foozy@708 | 1191 \rcsection{bugzilla} $B$N@bL@$G$O(B |
foozy@708 | 1192 ``leading path elements'' $B$HI=8=$7$F$$$k!#(B |
foozy@708 | 1193 $BE}0lE*$JI=8=$,I,MW$H;W$o$l$k!#(B}$B!#(B |
foozy@708 | 1194 $BNc$($P!"(B |
foozy@708 | 1195 $B%5!<%P>e$N%j%]%8%H%j$,(B \dirname{/home/hg/repos} $BG[2<$K$"$j!"(B |
foozy@708 | 1196 \hgext{notify} $B$,(B |
foozy@708 | 1197 \dirname{/home/hg/repos/shared/test} $B$H$$$&%j%]%8%H%j$rG'<1$7$F$$$k>l9g!"(B |
foozy@708 | 1198 \rcitem{notify}{strip} $B$r(B \texttt{4} $B$K@_Dj$9$k$3$H$G(B |
foozy@708 | 1199 \hgext{notify} $B$K$h$k9XFI<T$H$N%Q%?!<%s%^%C%A%s%0$O!"(B |
foozy@708 | 1200 $B%Q%9$r(B \dirname{shared/test} $B$HG'<1$7$?>e$G9T$o$l$^$9!#(B |
foozy@708 | 1201 |
foozy@708 | 1202 \item[\rcitem{notify}{template}] |
foozy@708 | 1203 $B%a%C%;!<%8Aw?.$N:]$K;HMQ$5$l$k%F%s%W%l!<%H%F%-%9%H!#(B |
foozy@708 | 1204 $B$3$N%F%s%W%l!<%H$O!"%a%C%;!<%8$N%X%C%@$H%\%G%#$NN>J}$NFbMF$r;XDj$7$^$9!#(B |
foozy@708 | 1205 |
foozy@708 | 1206 \item[\rcitem{notify}{maxdiff}] |
foozy@708 | 1207 $B%a%C%;!<%8KvHx$KIUM?$5$l$k:9J,%G!<%?$N:GBg9T?t!#(B |
foozy@708 | 1208 $B$3$N9T?t$h$j$bBg$-$$>l9g!":9J,%G!<%?$O@Z$j5M$a$i$l$^$9!#(B |
foozy@708 | 1209 $B$3$NCM$N4{DjCM$O(B 300 $B$K@_Dj$5$l$F$$$^$9!#(B |
foozy@708 | 1210 $B$3$NCM$r(B \texttt{0} $B$K$7$?>l9g!"(B |
foozy@708 | 1211 $BDLCN$NEE;R%a!<%k$K:9J,%G!<%?$OIUM?$5$l$^$;$s!#(B |
foozy@708 | 1212 |
foozy@708 | 1213 \item[\rcitem{notify}{sources}] $BG[N8$9$Y$-%A%'%s%8%;%C%H$NM3Mh85$N0lMw!#(B |
foozy@708 | 1214 $B$3$N@_Dj$K$h$jNc$($P!"(B |
foozy@708 | 1215 $B1s3V%f!<%6$,%5!<%P$r7PM3$7$FEv3:%j%]%8%H%j$X(B |
foozy@708 | 1216 \hgcmd{push} $B$7$?%A%'%s%8%;%C%H$KBP$7$F$N$_(B |
foozy@708 | 1217 \hgext{notify} $B$,EE;R%a!<%k$GDLCN$9$k!"(B |
foozy@708 | 1218 $B$H$$$C$?@_Dj$r$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 1219 $B$3$3$G5-=R2DG=$JM3Mh85$N0lMw$O!"(B\ref{sec:hook:sources}~$B@a$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1220 |
foozy@708 | 1221 \end{description} |
foozy@708 | 1222 |
foozy@708 | 1223 \rcsection{web} $B%;%/%7%g%s$G(B |
foozy@708 | 1224 \rcitem{web}{baseurl} $B9`L\$r@_Dj$7$F$$$k>l9g!"(B |
foozy@708 | 1225 $B%F%s%W%l!<%HCf$G(B \texttt{webroot} $B$H$7$F;HMQ$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 1226 |
foozy@708 | 1227 \hgext{notify} $B@_Dj>pJs$N0l<0$r0J2<$K<($7$^$9!#(B |
foozy@708 | 1228 |
foozy@708 | 1229 \begin{codesample2} |
foozy@708 | 1230 [notify] |
foozy@708 | 1231 # $B<B:]$KEE;R%a!<%k$rAw$k$+H]$+(B |
foozy@708 | 1232 test = false |
foozy@708 | 1233 # $BDLCN$r9T$&%j%]%8%H%j<+?H$NCf$KCV$+$l$F$$$k9XFI<T>pJs(B |
foozy@708 | 1234 config = /home/hg/repos/notify/notify.conf |
foozy@708 | 1235 # $B%j%]%8%H%j$,(B /home/hg/repos $BG[2<$K$"$k$N$G(B "/" $BJ8;z$r(B4$B$D=|5n(B |
foozy@708 | 1236 strip = 4 |
foozy@708 | 1237 template = X-Hg-Repo: \{webroot\}\\n\\\\ |
foozy@708 | 1238 Subject: \{webroot\}: \{desc|firstline|strip\}\\n\\\\ |
foozy@708 | 1239 From: \{author\}\\n\\\\ |
foozy@708 | 1240 \\n\\\\ |
foozy@708 | 1241 changeset \{node|short\} in \{root\}\\n\\\\ |
foozy@708 | 1242 details: \{baseurl\}\{webroot\}?cmd=changeset;node=\{node|short\}\\n\\\\ |
foozy@708 | 1243 description:\\n\\\\ |
foozy@708 | 1244 \\t\{desc|tabindent|strip\} |
foozy@708 | 1245 |
foozy@708 | 1246 [web] |
foozy@708 | 1247 baseurl = http://hg.example.com/ |
foozy@708 | 1248 \end{codesample2} |
foozy@708 | 1249 |
foozy@708 | 1250 $B$3$N@_Dj$K$h$j!"(B |
foozy@708 | 1251 $B0J2<$N$h$&$J%a%C%;!<%8$,@8@.$5$l$^$9!#(B |
foozy@708 | 1252 |
foozy@708 | 1253 \begin{codesample2} |
foozy@708 | 1254 X-Hg-Repo: tests/slave |
foozy@708 | 1255 Subject: tests/slave: Handle error case when slave has no buffers |
foozy@708 | 1256 Date: Wed, 2 Aug 2006 15:25:46 -0700 (PDT) |
foozy@708 | 1257 |
foozy@708 | 1258 changeset 3cba9bfe74b5 in /home/hg/repos/tests/slave |
foozy@708 | 1259 details: http://hg.example.com/tests/slave?cmd=changeset;node=3cba9bfe74b5 |
foozy@708 | 1260 description: |
foozy@708 | 1261 Handle error case when slave has no buffers |
foozy@708 | 1262 diffs (54 lines): |
foozy@708 | 1263 |
foozy@708 | 1264 diff -r 9d95df7cf2ad -r 3cba9bfe74b5 include/tests.h |
foozy@708 | 1265 --- a/include/tests.h Wed Aug 02 15:19:52 2006 -0700 |
foozy@708 | 1266 +++ b/include/tests.h Wed Aug 02 15:25:26 2006 -0700 |
foozy@708 | 1267 @@ -212,6 +212,15 @@ static __inline__ void test_headers(void *h) |
foozy@708 | 1268 [...snip...] |
foozy@708 | 1269 \end{codesample2} |
foozy@708 | 1270 |
foozy@708 | 1271 \subsubsection{Testing and troubleshooting} |
foozy@708 | 1272 |
foozy@708 | 1273 $B4{DjCM$N$^$^$G$O(B \hgext{notify} $B3HD%$O(B |
foozy@708 | 1274 \emph{$B0l@Z$N%a!<%k$rAw?.$7$^$;$s(B}$B$N$G!"(B |
foozy@708 | 1275 \rcitem{notify}{test} $B9`L\$rL@<(E*$K(B |
foozy@708 | 1276 \texttt{false} $B$G@_Dj$9$k$3$H$rK:$l$J$$$G$/$@$5$$!#(B |
foozy@708 | 1277 $B$3$N@_Dj$r9T$&$^$G$O!"(B |
foozy@708 | 1278 \hgext{notify} $B3HD%$OAw?.$9$k(B\emph{$B$G$"$m$&(B}$B%a%C%;!<%8$rI=<($7$^$9!#(B |
foozy@708 | 1279 |
foozy@708 | 1280 \section{Information for writers of hooks} |
foozy@708 | 1281 \label{sec:hook:ref} |
foozy@708 | 1282 |
foozy@708 | 1283 \subsection{In-process hook execution} |
foozy@708 | 1284 |
foozy@708 | 1285 $B%W%m%;%9Fb%U%C%/$O!"0J2<$N0z?t7A<0$G5/F0$5$l$^$9!#(B |
foozy@708 | 1286 |
foozy@708 | 1287 \begin{codesample2} |
foozy@708 | 1288 def myhook(ui, repo, **kwargs): |
foozy@708 | 1289 pass |
foozy@708 | 1290 \end{codesample2} |
foozy@708 | 1291 |
foozy@708 | 1292 \texttt{ui} $B0z?t$O(B |
foozy@708 | 1293 \pymodclass{mercurial.ui}{ui} $B%*%V%8%'%/%H!"(B |
foozy@708 | 1294 \texttt{repo} $B0z?t$O(B |
foozy@708 | 1295 \pymodclass{mercurial.localrepo}{localrepository} $B%*%V%8%'%/%H$G$9!#(B |
foozy@708 | 1296 \texttt{**kwargs} $B%Q%i%a!<%?$N;}$DL>A0$HCM$O!"(B |
foozy@708 | 1297 $B5/F0$5$l$k%U%C%/$N<oN`$K0MB8$7!"(B |
foozy@708 | 1298 $B0J2<$N6&DL$NFCD'$r;}$C$F$$$^$9!#(B |
foozy@708 | 1299 |
foozy@708 | 1300 \begin{itemize} |
foozy@708 | 1301 \item \texttt{node} $B$J$$$7(B \texttt{parent\emph{N}} $B$H$$$&L>A0$N0z?t$O!"(B |
foozy@708 | 1302 16$B?J?t$N%A%'%s%8%;%C%H(BID$B$rJ];}$7$F$$$^$9!#(B |
foozy@708 | 1303 $B6u$NJ8;zNs$O!"(B |
foozy@708 | 1304 0 $BB3$-$NJ8;zNs$NBe$o$j$K(B ``null $B%A%'%s%8%;%C%H(BID'' $B$r0UL#$7$^$9!#(B |
foozy@708 | 1305 |
foozy@708 | 1306 \item \texttt{url} $B$H$$$&L>A0$N0z?t$O!"(B |
foozy@708 | 1307 $B$=$l$,FCDj2DG=$G$"$l$P!"1s3V%j%]%8%H%j$N(B URL $B$rI=$7$^$9!#(B |
foozy@708 | 1308 |
foozy@708 | 1309 \item $B??56CM0z?t$O!"(BPython $B$N(B \texttt{bool} $B%*%V%8%'%/%H$GI=$5$l$^$9!#(B |
foozy@708 | 1310 |
foozy@708 | 1311 \end{itemize} |
foozy@708 | 1312 |
foozy@708 | 1313 $B%W%m%;%9Fb%U%C%/$O!"(B |
foozy@708 | 1314 $B!J30It%U%C%/$,%j%]%8%H%jD>2<$G<B9T$5$l$k$N$H0c$$!K(B |
foozy@708 | 1315 $B%W%m%;%9$N:n6H%G%#%l%/%H%j$rJQ99$;$:$K5/F0$5$l$^$9!#(B |
foozy@708 | 1316 $B%W%m%;%9$N:n6H%G%#%l%/%H%j$r0\F0$5$;$k$H!"(B |
foozy@708 | 1317 Mercurial API $B$N8F$S=P$7$,<:GT$9$kMW0x$H@.$j$($^$9$N$G!"(B |
foozy@708 | 1318 $B%W%m%;%9Fb%U%C%/$O:n6H%G%#%l%/%H%j$rJQ99$7$F$O$$$1$^$;$s!#(B |
foozy@708 | 1319 |
foozy@708 | 1320 $B!J%W%m%;%9Fb!K%U%C%/$,??56CM(B ``false'' $B$rJV5Q$7$?>l9g!"(B |
foozy@708 | 1321 $B%U%C%/8F$S=P$7$O@.8y$7$?$b$N$H$_$J$5$l$^$9!#(B |
foozy@708 | 1322 $B??56CM(B ``true'' $B$,JV5Q$5$l$k$+!"(B |
foozy@708 | 1323 $BNc30$,IbMH$5$l$?>l9g!"(B |
foozy@708 | 1324 $B%U%C%/8F$S=P$7$O<:GT$7$?$b$N$H$_$J$5$l$^$9!#(B |
foozy@708 | 1325 $B5/F0$N47=,$rM}2r$9$k$K$O!"(B |
foozy@708 | 1326 ``$B<:GT$7$?$+H]$+$rDLCN$9$k(B''$B$H3P$($k$N$,NI$$$G$7$g$&!#(B |
foozy@708 | 1327 |
foozy@708 | 1328 $B%A%'%s%8%;%C%H(BID$B$O!"(B |
foozy@708 | 1329 Mercurial API $B$,>oMQ$7$F$$$k%P%$%J%j%O%C%7%e7A<0$G$O$J$/!"(B |
foozy@708 | 1330 Python $B%U%C%/$K(B16$B?JJ8;zNs$N7A<0$GEO$5$l$kE@$KCm0U$7$F$/$@$5$$!#(B |
foozy@708 | 1331 16$B?J%O%C%7%eCM$r%P%$%J%j%O%C%7%eCM7A<0$KJQ49$9$k$K$O!"(B |
foozy@708 | 1332 \pymodfunc{mercurial.node}{bin} $B4X?t$r;HMQ$7$F$/$@$5$$!#(B |
foozy@708 | 1333 |
foozy@708 | 1334 \subsection{External hook execution} |
foozy@708 | 1335 |
foozy@708 | 1336 $B%W%m%;%930%U%C%/!J$N5/F0J8;zNs!K$O!"(B |
foozy@708 | 1337 Mercurial $B$r<B9T$7$F$$$k%7%'%k$KEO$5$l$^$9!#(B |
foozy@708 | 1338 $B$=$N$?$a!"(B |
foozy@708 | 1339 $BJQ?tCV49$d%3%^%s%I=PNO$N%j%@%$%l%/%H$H$$$C$?!"(B |
foozy@708 | 1340 $B%7%'%k$N5!G=$,MxMQ2DG=$G$9!#(B |
foozy@708 | 1341 $B%W%m%;%930%U%C%/$O!"(B |
foozy@708 | 1342 $B!J%W%m%;%9Fb%U%C%/$,(B Mercurial $B$,5/F0$5$l$?%G%#%l%/%H%j$G<B9T$5$l$k$N$H0c$$!K(B |
foozy@708 | 1343 $B%j%]%8%H%j%k!<%HD>2<$G<B9T$5$l$^$9!#(B |
foozy@708 | 1344 |
foozy@708 | 1345 $B%U%C%/0z?t$O!"4D6-JQ?t$r7PM3$7$FEO$5$l$^$9!#(B |
foozy@708 | 1346 $B8D!9$N4D6-JQ?t$NL>A0$O!"(B |
foozy@708 | 1347 $BBgJ8;z$G3n$D(B ``\texttt{HG\_}'' $B@\F,<-$,IUM?$5$l$?7A<0$KJQ49$5$l$^$9!#(B |
foozy@708 | 1348 $BNc$($P!"(B |
foozy@708 | 1349 $B0z?tL>$,(B ``\texttt{node}'' $B$N>l9g!"(B |
foozy@708 | 1350 $BEv3:0z?t$rI=$94D6-JQ?t$NL>A0$O(B ``\texttt{HG\_NODE}'' $B$H$J$j$^$9!#(B |
foozy@708 | 1351 |
foozy@708 | 1352 $B??56CM0z?t$O!"(B |
foozy@708 | 1353 ``true'' $B$,J8;zNs(B ``\texttt{1}'' $B$G!"(B |
foozy@708 | 1354 ``false'' $B$,J8;zNs(B ``\texttt{0}'' $B$GI=$5$l$^$9!#(B |
foozy@708 | 1355 $B4D6-JQ?t(B |
foozy@708 | 1356 \envar{HG\_NODE}$B!"(B\envar{HG\_PARENT1} $B$J$$$7(B \envar{HG\_PARENT2} $B$O!"(B |
foozy@708 | 1357 $B%A%'%s%8%;%C%H(BID$B$r(B16$B?JJ8;zNs$GJ];}$7$^$9!#(B |
foozy@708 | 1358 ``$B6u$N%A%'%s%8%;%C%H(BID''$B$O!"(B |
foozy@708 | 1359 ``0'' $B$NO"B3$G$O$J$/6u$NJ8;zNs$H$7$FI=8=$5$l$^$9!#(B |
foozy@708 | 1360 $B4D6-JQ?t(B \envar{HG\_URL} $B$O!"(B |
foozy@708 | 1361 $B$=$l$,FCDj2DG=$J>l9g$K8B$j!"1s3V%j%]%8%H%j$N(B URL $B$rJ];}$7$^$9!#(B |
foozy@708 | 1362 |
foozy@708 | 1363 $B%W%m%;%930%U%C%/$,=*N;%3!<%I(B0$B$G=*N;$7$?>l9g!"(B |
foozy@708 | 1364 $B%U%C%/$N<B9T$O@.8y$7$?$b$N$H$_$J$5$l$^$9!#(B |
foozy@708 | 1365 $B=*N;%3!<%I$,(B0$B0J30$N>l9g!"(B |
foozy@708 | 1366 $B%U%C%/$N<B9T$O<:GT$7$?$b$N$H$_$J$5$l$^$9!#(B |
foozy@708 | 1367 |
foozy@708 | 1368 \subsection{Finding out where changesets come from} |
foozy@708 | 1369 |
foozy@708 | 1370 $B%m!<%+%k%j%]%8%H%j$HB>$N%j%]%8%H%j$N4V$N%A%'%s%8%;%C%H$NE>Aw$K4X$o$k%U%C%/$O!"(B |
foozy@708 | 1371 ``$B8~$3$&B&(B''$B$N>pJs$rCN$k$3$H$,$G$-$k>l9g$,$"$j$^$9!#(B |
foozy@708 | 1372 Mercurial $B$O!"(B |
foozy@708 | 1373 $B%A%'%s%8%;%C%H$,(B\emph{$B$I$N$h$&$K$7$F(B}$BE>Aw$5$l$?$N$+$H!"(B |
foozy@708 | 1374 $BB?$/$N>l9g!"(B |
foozy@708 | 1375 \emph{$B$I$N%j%]%8%H%j(B}$B$H$N4V$G%A%'%s%8%;%C%H$,E>Aw$5$l$k$N$+$bCN$C$F$$$^$9!#(B |
foozy@708 | 1376 |
foozy@708 | 1377 \subsubsection{Sources of changesets} |
foozy@708 | 1378 \label{sec:hook:sources} |
foozy@708 | 1379 |
foozy@708 | 1380 Mercurial $B$O%j%]%8%H%j4V$G%A%'%s%8%;%C%H$rE>Aw$9$k0U?^$r!"(B |
foozy@708 | 1381 $B%U%C%/$KBP$7$F;vA0!J$J$$$7;v8e$K!KDLCN$7$^$9!#(B |
foozy@708 | 1382 $B$3$N>pJs$O!"(B |
foozy@708 | 1383 Python $B$K$h$k%W%m%;%9Fb%U%C%/$N>l9g$O(B \texttt{source} $B$H$$$&L>A0$N0z?t$G!"(B |
foozy@708 | 1384 $B30It%U%C%/$N>l9g$O(B \envar{HG\_SOURCE} $B$H$$$&L>A0$N4D6-JQ?t$G!"(B |
foozy@708 | 1385 Mercurial $B$+$i%U%C%/$KEO$5$l$^$9!#(B |
foozy@708 | 1386 |
foozy@708 | 1387 \begin{description} |
foozy@708 | 1388 \item[\texttt{serve}] $B1s3V%j%]%8%H%j$H$N4V$r!"(B |
foozy@708 | 1389 http $B$J$$$7(B ssh $B7PM3$G%A%'%s%8%;%C%H$,E>Aw$5$l$^$9!#(B |
foozy@708 | 1390 |
foozy@708 | 1391 \item[\texttt{pull}] $B$"$k%j%]%8%H%j$+$iB>$N%j%]%8%H%j$X!"(B |
foozy@708 | 1392 \hgcmd{pull} $B$K$h$j%A%'%s%8%;%C%H$,E>Aw$5$l$^$9!#(B |
foozy@708 | 1393 |
foozy@708 | 1394 \item[\texttt{push}] $B$"$k%j%]%8%H%j$+$iB>$N%j%]%8%H%j$X!"(B |
foozy@708 | 1395 \hgcmd{push} $B$K$h$j%A%'%s%8%;%C%H$,E>Aw$5$l$^$9!#(B |
foozy@708 | 1396 |
foozy@708 | 1397 \item[\texttt{bundle}] $B$"$k%j%]%8%H%j$+$iB>$N%j%]%8%H%j$X!"(B |
foozy@708 | 1398 \hgcmd{bundle} $B$K$h$j%A%'%s%8%;%C%H$,E>Aw$5$l$^$9!#(B |
foozy@708 | 1399 |
foozy@708 | 1400 \end{description} |
foozy@708 | 1401 |
foozy@708 | 1402 \subsubsection{Where changes are going---remote repository URLs} |
foozy@708 | 1403 \label{sec:hook:url} |
foozy@708 | 1404 |
foozy@708 | 1405 Mercurial $B$O!"(B |
foozy@708 | 1406 $B%j%]%8%H%j4V$G$N%A%'%s%8%;%C%HE>Aw=hM}$K$*$1$k(B``$B8~$3$&B&(B''$B$N0LCV$r!"(B |
foozy@708 | 1407 $B2DG=$G$"$l$P%U%C%/$KCN$i$;$^$9!#(B |
foozy@708 | 1408 $B$3$N>pJs$O!"(B |
foozy@708 | 1409 Python $B$K$h$k%W%m%;%9Fb%U%C%/$N>l9g$O(B \texttt{url} $B$H$$$&L>A0$N0z?t$G!"(B |
foozy@708 | 1410 $B30It%U%C%/$N>l9g$O(B \envar{HG\_URL} $B$H$$$&L>A0$N4D6-JQ?t$G!"(B |
foozy@708 | 1411 Mercurial $B$+$i%U%C%/$KEO$5$l$^$9!#(B |
foozy@708 | 1412 |
foozy@708 | 1413 $B$3$N>pJs$O>o$K$o$+$k$H$$$&$o$1$G$O$"$j$^$;$s!#(B |
foozy@708 | 1414 http $B$J$$$7(B ssh |
foozy@708 | 1415 $B7PM3$G%5!<%S%9$rDs6!$7$F$$$k%j%]%8%H%j$K$*$$$F%U%C%/$,5/F0$5$l$?>l9g!"(B |
foozy@708 | 1416 Mercurial $B$O1s3V%j%]%8%H%j$rFCDj$9$k$3$H$O$G$-$^$;$s$,!"(B |
foozy@708 | 1417 $B%/%i%$%"%s%H$,$I$N%"%I%l%9$+$i@\B3$7$F$$$k$N$+$OFCDj$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 1418 $B$3$N$h$&$J>l9g!"(BURL $B$O0J2<$N$$$:$l$+$N7A<0$K$J$j$^$9!#(B |
foozy@708 | 1419 |
foozy@708 | 1420 \begin{itemize} |
foozy@708 | 1421 \item \texttt{remote:ssh:\emph{ip-address}}---$BM?$($i$l$?(B IP $B%"%I%l%9$+$i$N(B |
foozy@708 | 1422 ssh $B1s3V@\B3!#(B |
foozy@708 | 1423 |
foozy@708 | 1424 \item \texttt{remote:http:\emph{ip-address}}---$BM?$($i$l$?(B IP $B%"%I%l%9$+$i$N(B |
foozy@708 | 1425 http $B1s3V@\B3!#(B |
foozy@708 | 1426 $B%/%i%$%"%s%H$,(B SSL $B$r;HMQ$7$?>l9g!"(B |
foozy@708 | 1427 \texttt{remote:https:\emph{ip-address}} $B7A<0$K$J$j$^$9!#(B |
foozy@708 | 1428 |
foozy@708 | 1429 \item Empty---$B1s3V@\B3$K4X$9$k>pJs$r<hF@$G$-$J$+$C$?>l9g!#(B |
foozy@708 | 1430 |
foozy@708 | 1431 \end{itemize} |
foozy@708 | 1432 |
foozy@708 | 1433 \section{Hook reference} |
foozy@708 | 1434 |
foozy@708 | 1435 \subsection{\hook{changegroup}---after remote changesets added} |
foozy@708 | 1436 \label{sec:hook:changegroup} |
foozy@708 | 1437 |
foozy@708 | 1438 $B$3$N%U%C%/$O!"(B |
foozy@708 | 1439 $BNc$($P(B \hgcmd{pull} $B$J$$$7(B \hgcmd{unbundle} $B$K$h$C$F!"(B |
foozy@708 | 1440 $B$"$i$+$8$aB8:_$7$F$$$k%A%'%s%8%;%C%H$N0l72$,!"(B |
foozy@708 | 1441 $B%j%]%8%H%j$KDI2C$5$l$?8e$K<B9T$5$l$^$9!#(B |
foozy@708 | 1442 $B$3$l$i$NA`:n$OG$0U8D$N%A%'%s%8%;%C%H$rDI2C$G$-$^$9$,!"(B |
foozy@708 | 1443 $B$3$N%U%C%/$O3FA`:nKh$K#12s$E$D<B9T$5$l$^$9!#(B |
foozy@708 | 1444 $B$3$N$3$H$O!"(B |
foozy@708 | 1445 $B%A%'%s%8%;%C%H$,$^$H$^$C$FDI2C$5$l$k$+H]$+$K4X$o$i$:!"(B |
foozy@708 | 1446 \hook{incoming} $B%U%C%/$N<B9T$,%A%'%s%8%;%C%HKh$K<B9T$5$l$k$N$HBP>HE*$G$9!#(B |
foozy@708 | 1447 |
foozy@708 | 1448 $BDI2C$5$l$?%A%'%s%8%;%C%H$KBP$9$k<+F02=$5$l$?%S%k%I!&%F%9%H$N3+;O7@5!$H$7$?$j!"(B |
foozy@708 | 1449 $B%P%0%G!<%?%Y!<%9$N99?7!"(B |
foozy@708 | 1450 $B%j%]%8%H%j$,?7$?$J%A%'%s%8%;%C%H$r<h$j9~$s$@$3$H$N9XFI<T$X$NDLCN!"(B |
foozy@708 | 1451 $B$H$$$C$?$b$N$,!"(B |
foozy@708 | 1452 $B$3$N%U%C%/$KA[Dj$5$l$kMQES$N0lIt$G$9!#(B |
foozy@708 | 1453 |
foozy@708 | 1454 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1455 |
foozy@708 | 1456 \begin{description} |
foozy@708 | 1457 \item[\texttt{node}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1458 $BDI2C$5$l$k0l72$NCf$N:G=i$N%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1459 $B$3$N%A%'%s%8%;%C%H$+$i(B |
foozy@708 | 1460 \index{tags!\texttt{tip}}\texttt{tip} |
foozy@708 | 1461 $B$^$G!J(B\texttt{tip} $B<+?H$b4^$`!K$NA4$F$N%A%'%s%8%;%C%H$,!"(B |
foozy@708 | 1462 $BC1FH$N(B \hgcmd{pull}$B!"(B\hgcmd{push} $B$J$$$7(B \hgcmd{unbundle} |
foozy@708 | 1463 $BA`:n$K$h$jDI2C$5$l$?$3$H$K$J$j$^$9!#(B |
foozy@708 | 1464 |
foozy@708 | 1465 \item[\texttt{source}] $BJ8;zNs!#(B |
foozy@708 | 1466 $B%A%'%s%8%;%C%H$NM3Mh85$rI=$7$^$9!#(B |
foozy@708 | 1467 $B>\:Y$O(B\ref{sec:hook:sources}~$B@a$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1468 |
foozy@708 | 1469 \item[\texttt{url}] URL$B!#(B |
foozy@708 | 1470 $BFCDj$G$-$k>l9g$K8B$j!"1s3V%j%]%8%H%j$N>l=j$rI=$7$^$9!#(B |
foozy@708 | 1471 $B>\:Y$O(B\ref{sec:hook:url}~$B@a$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1472 |
foozy@708 | 1473 \end{description} |
foozy@708 | 1474 |
foozy@708 | 1475 $BMWJLES;2>H(B: |
foozy@708 | 1476 \hook{incoming} $B!J(B\ref{sec:hook:incoming}~$B@a!K!"(B |
foozy@708 | 1477 \hook{prechangegroup} $B!J(B\ref{sec:hook:prechangegroup}~$B@a!K!"(B |
foozy@708 | 1478 \hook{pretxnchangegroup} $B!J(B\ref{sec:hook:pretxnchangegroup}~$B@a!K(B |
foozy@708 | 1479 |
foozy@708 | 1480 \subsection{\hook{commit}---after a new changeset is created} |
foozy@708 | 1481 \label{sec:hook:commit} |
foozy@708 | 1482 |
foozy@708 | 1483 $B$3$N%U%C%/$O!"?7$7$$%A%'%s%8%;%C%H$,:n@.$5$l$?8e$G<B9T$5$l$^$9!#(B |
foozy@708 | 1484 |
foozy@708 | 1485 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1486 |
foozy@708 | 1487 \begin{description} |
foozy@708 | 1488 \item[\texttt{node}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1489 $B?7$7$/%3%_%C%H$5$l$?%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1490 |
foozy@708 | 1491 \item[\texttt{parent1}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1492 $B?7$7$/%3%_%C%H$5$l$?%A%'%s%8%;%C%H$K$H$C$F!"(B |
foozy@708 | 1493 $BBh#1?F$H$J$k%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1494 |
foozy@708 | 1495 \item[\texttt{parent2}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1496 $B?7$7$/%3%_%C%H$5$l$?%A%'%s%8%;%C%H$K$H$C$F!"(B |
foozy@708 | 1497 $BBh#2?F$H$J$k%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1498 |
foozy@708 | 1499 \end{description} |
foozy@708 | 1500 |
foozy@708 | 1501 $BMWJLES;2>H(B: \hook{precommit} $B!J(B\ref{sec:hook:precommit}~$B@a!K!"(B |
foozy@708 | 1502 \hook{pretxncommit} $B!J(B\ref{sec:hook:pretxncommit}~$B@a!K(B |
foozy@708 | 1503 |
foozy@708 | 1504 \subsection{\hook{incoming}---after one remote changeset is added} |
foozy@708 | 1505 \label{sec:hook:incoming} |
foozy@708 | 1506 |
foozy@708 | 1507 $B$3$N%U%C%/$O!"(B |
foozy@708 | 1508 $BNc$($P(B \hgcmd{push} $B$K$h$C$F!"(B |
foozy@708 | 1509 $B$"$i$+$8$aB8:_$7$F$$$k%A%'%s%8%;%C%H$,!"(B |
foozy@708 | 1510 $B%j%]%8%H%j$KDI2C$5$l$?8e$K<B9T$5$l$^$9!#(B |
foozy@708 | 1511 $BJ#?t$N%A%'%s%8%;%C%H$,C10l$NA`:n$GDI2C$5$l$?>l9g$G$b!"(B |
foozy@708 | 1512 $B$3$N%U%C%/$ODI2C$5$l$?8D!9$N%A%'%s%8%;%C%HKh$K<B9T$5$l$^$9!#(B |
foozy@708 | 1513 |
foozy@708 | 1514 $B$3$N%U%C%/$r(B \hook{changegroup} $B%U%C%/!J(B\ref{sec:hook:changegroup}~$B@a;2>H!K(B |
foozy@708 | 1515 $B$HF1MM$NL\E*$K;HMQ$9$k$3$H$,$G$-$^$9!#(B |
foozy@708 | 1516 $B0l72$N%A%'%s%8%;%C%HKh$N%U%C%/5/F0$NJ}$,JXMx$J>l9g$b$"$j$^$9$,!"(B |
foozy@708 | 1517 $B;~$K$O%A%'%s%8%;%C%H$4$H$N%U%C%/5/F0$bJXMx$G$9!#(B |
foozy@708 | 1518 |
foozy@708 | 1519 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1520 |
foozy@708 | 1521 \begin{description} |
foozy@708 | 1522 \item[\texttt{node}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1523 $B?7$7$/DI2C$5$l$?%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1524 |
foozy@708 | 1525 \item[\texttt{source}] $BJ8;zNs!#(B |
foozy@708 | 1526 $B%A%'%s%8%;%C%H$NM3Mh85$rI=$7$^$9!#(B |
foozy@708 | 1527 $B>\:Y$O(B\ref{sec:hook:sources}~$B@a$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1528 |
foozy@708 | 1529 \item[\texttt{url}] URL$B!#(B |
foozy@708 | 1530 $BFCDj$G$-$k>l9g$K8B$j!"1s3V%j%]%8%H%j$N>l=j$rI=$7$^$9!#(B |
foozy@708 | 1531 $B>\:Y$O(B\ref{sec:hook:url}~$B@a$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1532 |
foozy@708 | 1533 \end{description} |
foozy@708 | 1534 |
foozy@708 | 1535 $BMWJLES;2>H(B: |
foozy@708 | 1536 \hook{changegroup} $B!J(B\ref{sec:hook:changegroup}~$B@a!K!"(B |
foozy@708 | 1537 \hook{prechangegroup} $B!J(B\ref{sec:hook:prechangegroup}~$B@a!K!"(B |
foozy@708 | 1538 \hook{pretxnchangegroup} $B!J(B\ref{sec:hook:pretxnchangegroup}~$B@a!K(B |
foozy@708 | 1539 |
foozy@708 | 1540 \subsection{\hook{outgoing}---after changesets are propagated} |
foozy@708 | 1541 \label{sec:hook:outgoing} |
foozy@708 | 1542 |
foozy@708 | 1543 $B$3$N%U%C%/$O!"(B |
foozy@708 | 1544 $BNc$($P(B \hgcmd{push} $B$J$$$7(B \hgcmd{bundle} $B$K$h$C$F!"(B |
foozy@708 | 1545 $BB>$N%j%]%8%H%j$X$H%A%'%s%8%;%C%H$N0l72$,EAGE$7$?8e$K<B9T$5$l$^$9!#(B |
foozy@708 | 1546 |
foozy@708 | 1547 $B%A%'%s%8%;%C%H$,30It$KEAGE$7$?$3$H$N4IM}<T$X$NDLCN$J$I$O!"(B |
foozy@708 | 1548 $B$3$N%U%C%/$KA[Dj$5$l$kMQES$N#1$D$G$9!#(B |
foozy@708 | 1549 |
foozy@708 | 1550 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1551 |
foozy@708 | 1552 \begin{description} |
foozy@708 | 1553 \item[\texttt{node}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1554 $BB>$N%j%]%8%H%j$X$HEAGE$9$k0l72$NCf$N:G=i$N%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1555 |
foozy@708 | 1556 \item[\texttt{source}] $BJ8;zNs!#(B |
foozy@708 | 1557 $BEAGEA`:n$NH/9TM3Mh$rI=$7$^$9!J(B\ref{sec:hook:sources}~$B@a$r;2>H$7$F$/$@$5$$!K!#(B |
foozy@708 | 1558 $B1s3V%/%i%$%"%s%H$+$i$N(B \hgcmd{pull} $BMW5a$N>l9g!"(B |
foozy@708 | 1559 \texttt{source} $B$O(B \texttt{serve} $B$H$J$j$^$9!#(B |
foozy@708 | 1560 $B%A%'%s%8%;%C%H72$r<hF@$7$h$&$H$9$k%/%i%$%"%s%H$,%m!<%+%k%[%9%H>e$K5o$k>l9g!"(B |
foozy@708 | 1561 $B%/%i%$%"%s%H$NA`:n<oJL$K1~$8$F!"(B |
foozy@708 | 1562 \texttt{source} $B$NCM$O(B |
foozy@708 | 1563 \texttt{bundle}$B!"(B\texttt{pull} $B$J$$$7(B \texttt{push} $B$N$$$:$l$+$K$J$j$^$9!#(B |
foozy@708 | 1564 |
foozy@708 | 1565 \item[\texttt{url}] URL$B!#(B |
foozy@708 | 1566 $BFCDj$G$-$k>l9g$K8B$j!"1s3V%j%]%8%H%j$N>l=j$rI=$7$^$9!#(B |
foozy@708 | 1567 $B>\:Y$O(B\ref{sec:hook:url}~$B@a$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1568 |
foozy@708 | 1569 \end{description} |
foozy@708 | 1570 |
foozy@708 | 1571 $BMWJLES;2>H!'(B |
foozy@708 | 1572 \hook{preoutgoing} $B!J(B\ref{sec:hook:preoutgoing}~$B@a!K(B |
foozy@708 | 1573 |
foozy@708 | 1574 \subsection{\hook{prechangegroup}---before starting to add remote changesets} |
foozy@708 | 1575 \label{sec:hook:prechangegroup} |
foozy@708 | 1576 |
foozy@708 | 1577 $B$3$N@)8fMQ%U%C%/$O!"(B |
foozy@708 | 1578 $BB>$N%j%]%8%H%j$+$i$N%A%'%s%8%;%C%H72$NDI2C$,(B |
foozy@708 | 1579 Mercurial $B$K$h$j3+;O$5$l$kD>A0$K<B9T$5$l$^$9!#(B |
foozy@708 | 1580 |
foozy@708 | 1581 $B$3$N%U%C%/$O%A%'%s%8%;%C%H72$NE>Aw3+;O$,5v2D$5$l$kA0$K<B9T$5$l$k$?$a!"(B |
foozy@708 | 1582 $B%U%C%/<+BN$ODI2C$5$l$k%A%'%s%8%;%C%H$K4X$9$k>pJs$rF@$k$3$H$,$G$-$^$;$s!#(B |
foozy@708 | 1583 $B$3$N%U%C%/$N<B9T$,<:GT$7$?>l9g!"%A%'%s%8%;%C%H72$OE>Aw$5$l$^$;$s!#(B |
foozy@708 | 1584 |
foozy@708 | 1585 $B$3$N%U%C%/$NMQES$N0l$D$K!"(B |
foozy@708 | 1586 $B%j%]%8%H%j$KBP$9$k30It$+$i$N%A%'%s%8%;%C%HDI2C$N6X;_$,$"$j$^$9!#(B |
foozy@708 | 1587 $BNc$($P!"(B |
foozy@708 | 1588 $B%m!<%+%k%[%9%H>e$N4IM}<T$,%j%]%8%H%j$rJQ99$G$-$k0lJ}$G!"(B |
foozy@708 | 1589 $BMxMQ<T$,%5!<%P7PM3$GJQ99$r(B \hgcmd{push} $B$G$-$J$$$h$&$K!"(B |
foozy@708 | 1590 $B0l;~E*$J$$$71J5W$K(B``$BE`7k(B''$B$9$k$3$H$b$G$-$^$9!#(B |
foozy@708 | 1591 |
foozy@708 | 1592 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1593 |
foozy@708 | 1594 \begin{description} |
foozy@708 | 1595 |
foozy@708 | 1596 \item[\texttt{source}] $BJ8;zNs!#(B |
foozy@708 | 1597 $B%A%'%s%8%;%C%H$NM3Mh85$rI=$7$^$9!#(B |
foozy@708 | 1598 $B>\:Y$O(B\ref{sec:hook:sources}~$B@a$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1599 |
foozy@708 | 1600 \item[\texttt{url}] URL$B!#(B |
foozy@708 | 1601 $BFCDj$G$-$k>l9g$K8B$j!"1s3V%j%]%8%H%j$N>l=j$rI=$7$^$9!#(B |
foozy@708 | 1602 $B>\:Y$O(B\ref{sec:hook:url}~$B@a$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1603 |
foozy@708 | 1604 \end{description} |
foozy@708 | 1605 |
foozy@708 | 1606 $BMWJLES;2>H!'(B |
foozy@708 | 1607 \hook{changegroup} $B!J(B\ref{sec:hook:changegroup}~$B@a!K!"(B |
foozy@708 | 1608 \hook{incoming} $B!J(B\ref{sec:hook:incoming}~$B@a!K!"(B |
foozy@708 | 1609 \hook{pretxnchangegroup} $B!J(B\ref{sec:hook:pretxnchangegroup}~$B@a!K(B |
foozy@708 | 1610 |
foozy@708 | 1611 \subsection{\hook{precommit}---before starting to commit a changeset} |
foozy@708 | 1612 \label{sec:hook:precommit} |
foozy@708 | 1613 |
foozy@708 | 1614 $B$3$N%U%C%/$O!"(B |
foozy@708 | 1615 Mercurial $B$,?7$?$J%A%'%s%8%;%C%H$r%3%_%C%H$9$kA0$K<B9T$5$l$^$9!#(B |
foozy@708 | 1616 $B%3%_%C%H$5$l$k%U%!%$%k!"%3%_%C%H%a%C%;!<%8$J$$$7F|IU$H$$$C$?!"(B |
foozy@708 | 1617 $B%3%_%C%H$K4X$9$k%a%?%G!<%?$r(B |
foozy@708 | 1618 Mercurial $B$,B7$($kA0$K<B9T$5$l$^$9!#(B |
foozy@708 | 1619 |
foozy@708 | 1620 $B$3$N%U%C%/$NMQES$N0l$D$K!"(B |
foozy@708 | 1621 $B%A%'%s%8%;%C%H$N<u$1F~$l$r5v$90lJ}$G$N!"(B |
foozy@708 | 1622 $B?7$?$J%A%'%s%8%;%C%H$N%3%_%C%H$N6X;_$,$"$j$^$9!#(B |
foozy@708 | 1623 $BB>$NMQES$H$H$7$F$O!"(B |
foozy@708 | 1624 $B%S%k%I$d%F%9%H$r<B;\$7!"(B |
foozy@708 | 1625 $B$=$l$i$,@.8y$7$?>l9g$K$N$_%3%_%C%H$r5v2D$9$k!"(B |
foozy@708 | 1626 $B$H$$$&$b$N$b$"$j$^$9!#(B |
foozy@708 | 1627 |
foozy@708 | 1628 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1629 |
foozy@708 | 1630 \begin{description} |
foozy@708 | 1631 \item[\texttt{parent1}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1632 $B:n6HNN0h%G%#%l%/%H%j$K$H$C$F!"(B |
foozy@708 | 1633 $BBh#1?F$H$J$k%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1634 |
foozy@708 | 1635 \item[\texttt{parent2}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1636 $B:n6HNN0h%G%#%l%/%H%j$K$H$C$F!"(B |
foozy@708 | 1637 $BBh#2?F$H$J$k%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1638 |
foozy@708 | 1639 \end{description} |
foozy@708 | 1640 |
foozy@708 | 1641 $B%3%_%C%H$,?J9T$7$?>l9g!"(B |
foozy@708 | 1642 $B:n6HNN0h%G%#%l%/%H%j$N!JN>!K?F$,!"(B |
foozy@708 | 1643 $B?7$?$J%A%'%s%8%;%C%H$N?F$H$J$j$^$9!#(B |
foozy@708 | 1644 |
foozy@708 | 1645 $BMWJLES;2>H!'(B |
foozy@708 | 1646 \hook{commit} $B!J(B\ref{sec:hook:commit}~$B@a!K!"(B |
foozy@708 | 1647 \hook{pretxncommit} $B!J(B\ref{sec:hook:pretxncommit}~$B@a!K(B |
foozy@708 | 1648 |
foozy@708 | 1649 \subsection{\hook{preoutgoing}---before starting to propagate changesets} |
foozy@708 | 1650 \label{sec:hook:preoutgoing} |
foozy@708 | 1651 |
foozy@708 | 1652 $B$3$N%U%C%/$O!"(B |
foozy@708 | 1653 Mercurial $B$,30It$KE>Aw$5$l$k%A%'%s%8%;%C%H$rFCDj$9$kD>A0$K<B9T$5$l$^$9!#(B |
foozy@708 | 1654 |
foozy@708 | 1655 $B%A%'%s%8%;%C%H$,B>$N%j%]%8%H%j$XE>Aw$5$l$k$N$rKI$0$3$H$O!"(B |
foozy@708 | 1656 $B$3$N%U%C%/$KA[Dj$5$l$kMQES$N#1$&$G$9!#(B |
foozy@708 | 1657 |
foozy@708 | 1658 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1659 |
foozy@708 | 1660 \begin{description} |
foozy@708 | 1661 \item[\texttt{source}] $BJ8;zNs!#(B |
foozy@708 | 1662 $BEv3:%j%]%8%H%j$KBP$9$k%A%'%s%8%;%C%H$N<hF@MW5a$NH/9TM3Mh$rI=$7$^$9(B |
foozy@708 | 1663 $B!J(B\ref{sec:hook:sources}~$B@a$r;2>H$7$F$/$@$5$$!K!#(B |
foozy@708 | 1664 $B$3$N%Q%i%a!<%?$,<h$jF@$kCM$K4X$7$F$O!"(B |
foozy@708 | 1665 \hook{outgoing} $B$N(B \texttt{source} $B%Q%i%a!<%?$K4X$9$k(B |
foozy@708 | 1666 \ref{sec:hook:outgoing}~$B@a$N5-=R$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1667 |
foozy@708 | 1668 \item[\texttt{url}] URL$B!#(B |
foozy@708 | 1669 $BFCDj$G$-$k>l9g$K8B$j!"1s3V%j%]%8%H%j$N>l=j$rI=$7$^$9!#(B |
foozy@708 | 1670 $B>\:Y$O(B\ref{sec:hook:url}~$B@a$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1671 |
foozy@708 | 1672 \end{description} |
foozy@708 | 1673 |
foozy@708 | 1674 $BMWJLES;2>H(B: |
foozy@708 | 1675 \hook{outgoing} $B!J(B\ref{sec:hook:outgoing}~$B@a!K(B |
foozy@708 | 1676 |
foozy@708 | 1677 \subsection{\hook{pretag}---before tagging a changeset} |
foozy@708 | 1678 \label{sec:hook:pretag} |
foozy@708 | 1679 |
foozy@708 | 1680 $B$3$N@)8f%U%C%/$O!"(B |
foozy@708 | 1681 $B%?%0$,@8@.$5$l$kA0$K<B9T$5$l$^$9!#(B |
foozy@708 | 1682 $B%U%C%/$N<B9T$,@.8y$7$?>l9g!"%?%0$N@8@.$O7QB3$5$l!"(B |
foozy@708 | 1683 $B%U%C%/$N<B9T$,<:GT$7$?>l9g!"%?%0$O@8@.$5$l$^$;$s!#(B |
foozy@708 | 1684 |
foozy@708 | 1685 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1686 |
foozy@708 | 1687 \begin{description} |
foozy@708 | 1688 \item[\texttt{local}] $B??56CM!#(B |
foozy@708 | 1689 $B%?%0$,%j%]%8%H%j$KBP$7$F%m!<%+%k$J$b$N(B |
foozy@708 | 1690 $B!J(B\sfilename{.hg/localtags} $B$K>pJs$,3JG<$5$l$k!K$J$N$+!"(B |
foozy@708 | 1691 Mercurial $B$K4IM}$5$l$k$b$N!J(B\sfilename{.hgtags} $B$K>pJs$,3JG<!K(B |
foozy@708 | 1692 $B$J$N$+$rI=$7$^$9!#(B |
foozy@708 | 1693 |
foozy@708 | 1694 \item[\texttt{node}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1695 $B%?%0IU$1$5$l$k%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1696 |
foozy@708 | 1697 \item[\texttt{tag}] $BJ8;zNs!#(B |
foozy@708 | 1698 $B:n@.$5$l$k%?%0$NL>A0!#(B |
foozy@708 | 1699 |
foozy@708 | 1700 \end{description} |
foozy@708 | 1701 |
foozy@708 | 1702 $B@8@.$5$l$k%?%0$,9=@.4IM}BP>]$H$J$k>l9g!"(B |
foozy@708 | 1703 \hook{precommit} $B!J(B\ref{sec:hook:commit}~$B@a!K$*$h$S(B |
foozy@708 | 1704 \hook{pretxncommit} $B!J(B\ref{sec:hook:pretxncommit}~$B@a!K(B |
foozy@708 | 1705 $B%U%C%/$b<B9T$5$l$^$9!#(B |
foozy@708 | 1706 |
foozy@708 | 1707 $BMWJLES;2>H!'(B |
foozy@708 | 1708 \hook{tag} $B!J(B\ref{sec:hook:tag}~$B@a!K(B |
foozy@708 | 1709 |
foozy@708 | 1710 \subsection{\hook{pretxnchangegroup}---before completing addition of |
foozy@708 | 1711 remote changesets} |
foozy@708 | 1712 \label{sec:hook:pretxnchangegroup} |
foozy@708 | 1713 |
foozy@708 | 1714 $B$3$N@)8f%U%C%/$O!"(B |
foozy@708 | 1715 $B%H%i%s%6%/%7%g%s(B--- |
foozy@708 | 1716 $B$3$N%H%i%s%6%/%7%g%s$O!"(B |
foozy@708 | 1717 $BB>$N%j%]%8%H%j$+$i$N0l72$N%A%'%s%8%;%C%H$NDI2C$r4IM}$7$^$9(B |
foozy@708 | 1718 ---$B$,40N;$9$kA0$K<B9T$5$l$^$9!#(B |
foozy@708 | 1719 $B%U%C%/$N<B9T$,@.8y$7$?>l9g!"%H%i%s%6%/%7%g%s$O40N;$7!"(B |
foozy@708 | 1720 $BA4$F$N%A%'%s%8%;%C%H$,%j%]%8%H%j$K$*$$$F1JB32=$5$l$^$9!#(B |
foozy@708 | 1721 $B%U%C%/$N<B9T$,<:GT$7$?>l9g!"(B |
foozy@708 | 1722 $B%H%i%s%6%/%7%g%s$O4,$-La$5$l!"(B |
foozy@708 | 1723 $B%A%'%s%8%;%C%H$K4X$9$k%G!<%?$OGK4~$5$l$^$9!#(B |
foozy@708 | 1724 |
foozy@708 | 1725 $B$3$N%U%C%/$O!"(B |
foozy@708 | 1726 $B!V$[$\DI2C$5$l$?!W%A%'%s%8%;%C%H$K4X$9$k%a%?%G!<%?$K%"%/%;%9$G$-$^$9$,!"(B |
foozy@708 | 1727 $B1JB32=$5$l$k$h$&$JA`:n(B\footnote{$BLuCm(B: |
foozy@708 | 1728 $BNc$($P!"30It$N(B DBMS $B$X$N%G!<%?3JG<$d!"(B |
foozy@708 | 1729 $B8x3+MQ%U%!%$%k$X$N=q$-=P$7Ey!#(B} |
foozy@708 | 1730 $B$r$3$l$i$N%G!<%?$K4p$E$$$F9T$&$Y$-$G$O$"$j$^$;$s(B |
foozy@708 | 1731 $B:n6H%G%#%l%/%H%j$bJQ99$9$Y$-$G$O$"$j$^$;$s!#(B |
foozy@708 | 1732 |
foozy@708 | 1733 $B$3$N%U%C%/$N<B9TCf$K!"(B |
foozy@708 | 1734 $BB>$N(B Mercurial $B%W%m%;%9$,F1$8%j%]%8%H%j$K%"%/%;%9$7$F$-$?>l9g!"(B |
foozy@708 | 1735 $B$3$N%W%m%;%9$+$i$O!"(B |
foozy@708 | 1736 $B!V$[$\DI2C$5$l$?!W%A%'%s%8%;%C%H$,1JB32=$5$l$?$b$N$N$h$&$K8+$($^$9!#(B |
foozy@708 | 1737 $B$3$N>u67$r2sHr$9$k<j=g$rF'$^$J$$$H!"(B |
foozy@708 | 1738 $B6%9g>uBV$K$J$j$+$M$^$;$s!#(B |
foozy@708 | 1739 |
foozy@708 | 1740 $B$3$N%U%C%/$O!"%A%'%s%8%;%C%H72$KBP$9$k?GCG$KMxMQ2DG=$G$9!#(B |
foozy@708 | 1741 $B%U%C%/$N<B9T$,<:GT$7$?>l9g!"(B |
foozy@708 | 1742 $B%H%i%s%6%/%7%g%s$,4,$-La$5$l!"(B |
foozy@708 | 1743 $BA4$F$N%A%'%s%8%;%C%H$,(B``$B5qH](B''$B$5$l$^$9!#(B |
foozy@708 | 1744 |
foozy@708 | 1745 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1746 |
foozy@708 | 1747 \begin{description} |
foozy@708 | 1748 \item[\texttt{node}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1749 $BDI2C$5$l$k0l72$NCf$N:G=i$N%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1750 $B$3$N%A%'%s%8%;%C%H$+$i(B |
foozy@708 | 1751 \index{tags!\texttt{tip}}\texttt{tip} |
foozy@708 | 1752 $B$^$G!J(B\texttt{tip} $B<+?H$b4^$`!K$NA4$F$N%A%'%s%8%;%C%H$,!"(B |
foozy@708 | 1753 $BC1FH$N(B \hgcmd{pull}$B!"(B\hgcmd{push} $B$J$$$7(B \hgcmd{unbundle} |
foozy@708 | 1754 $BA`:n$K$h$jDI2C$5$l$?$3$H$K$J$j$^$9!#(B |
foozy@708 | 1755 |
foozy@708 | 1756 \item[\texttt{source}] $BJ8;zNs!#(B |
foozy@708 | 1757 $B%A%'%s%8%;%C%H$NM3Mh85$rI=$7$^$9!#(B |
foozy@708 | 1758 $B>\:Y$O(B\ref{sec:hook:sources}~$B@a$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1759 |
foozy@708 | 1760 \item[\texttt{url}] URL$B!#(B |
foozy@708 | 1761 $BFCDj$G$-$k>l9g$K8B$j!"1s3V%j%]%8%H%j$N>l=j$rI=$7$^$9!#(B |
foozy@708 | 1762 $B>\:Y$O(B\ref{sec:hook:url}~$B@a$r;2>H$7$F$/$@$5$$!#(B |
foozy@708 | 1763 |
foozy@708 | 1764 \end{description} |
foozy@708 | 1765 |
foozy@708 | 1766 $BMWJLES;2>H!'(B |
foozy@708 | 1767 \hook{changegroup} $B!J(B\ref{sec:hook:changegroup}$B!K!"(B |
foozy@708 | 1768 \hook{incoming} $B!J(B\ref{sec:hook:incoming}$B!K!"(B |
foozy@708 | 1769 \hook{prechangegroup} $B!J(B\ref{sec:hook:prechangegroup}$B!K(B |
foozy@708 | 1770 |
foozy@708 | 1771 \subsection{\hook{pretxncommit}---before completing commit of new changeset} |
foozy@708 | 1772 \label{sec:hook:pretxncommit} |
foozy@708 | 1773 |
foozy@708 | 1774 $B$3$N@)8f%U%C%/$O!"(B |
foozy@708 | 1775 $B%H%i%s%6%/%7%g%s(B--- |
foozy@708 | 1776 $B$3$N%H%i%s%6%/%7%g%s$O!"(B |
foozy@708 | 1777 $B?7$?$J%A%'%s%8%;%C%H$N%3%_%C%H$r4IM}$7$^$9(B |
foozy@708 | 1778 ---$B$,40N;$9$kA0$K<B9T$5$l$^$9!#(B |
foozy@708 | 1779 $B%U%C%/$N<B9T$,@.8y$7$?>l9g!"%H%i%s%6%/%7%g%s$O40N;$7!"(B |
foozy@708 | 1780 $B%A%'%s%8%;%C%H$,%j%]%8%H%j$K$*$$$F1JB32=$5$l$^$9!#(B |
foozy@708 | 1781 $B%U%C%/$N<B9T$,<:GT$7$?>l9g!"(B |
foozy@708 | 1782 $B%H%i%s%6%/%7%g%s$O4,$-La$5$l!"(B |
foozy@708 | 1783 $B%3%_%C%H$K4X$9$k%G!<%?$OGK4~$5$l$^$9!#(B |
foozy@708 | 1784 |
foozy@708 | 1785 $B$3$N%U%C%/$O!"(B |
foozy@708 | 1786 $B!V$[$\?75,:n@.$5$l$?!W%A%'%s%8%;%C%H$K4X$9$k%a%?%G!<%?$K%"%/%;%9$G$-$^$9$,!"(B |
foozy@708 | 1787 $B1JB32=$5$l$k$h$&$JA`:n$r$3$l$i$N%G!<%?$K4p$E$$$F9T$&$Y$-$G$O$"$j$^$;$s(B |
foozy@708 | 1788 $B:n6H%G%#%l%/%H%j$bJQ99$9$Y$-$G$O$"$j$^$;$s!#(B |
foozy@708 | 1789 |
foozy@708 | 1790 $B$3$N%U%C%/$N<B9TCf$K!"(B |
foozy@708 | 1791 $BB>$N(B Mercurial $B%W%m%;%9$,F1$8%j%]%8%H%j$K%"%/%;%9$7$F$-$?>l9g!"(B |
foozy@708 | 1792 $B$3$N%W%m%;%9$+$i$O!"(B |
foozy@708 | 1793 $B!V$[$\?75,:n@.$5$l$?!W%A%'%s%8%;%C%H$,1JB32=$5$l$?$b$N$N$h$&$K8+$($^$9!#(B |
foozy@708 | 1794 $B$3$N>u67$r2sHr$9$k<j=g$rF'$^$J$$$H!"(B |
foozy@708 | 1795 $B6%9g>uBV$K$J$j$+$M$^$;$s!#(B |
foozy@708 | 1796 |
foozy@708 | 1797 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1798 |
foozy@708 | 1799 \begin{description} |
foozy@708 | 1800 |
foozy@708 | 1801 \item[\texttt{node}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1802 $B?7$7$/%3%_%C%H$5$l$?%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1803 |
foozy@708 | 1804 \item[\texttt{parent1}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1805 $B?7$7$/%3%_%C%H$5$l$?%A%'%s%8%;%C%H$K$H$C$F!"(B |
foozy@708 | 1806 $BBh#1?F$H$J$k%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1807 |
foozy@708 | 1808 \item[\texttt{parent2}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1809 $B?7$7$/%3%_%C%H$5$l$?%A%'%s%8%;%C%H$K$H$C$F!"(B |
foozy@708 | 1810 $BBh#2?F$H$J$k%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1811 |
foozy@708 | 1812 \end{description} |
foozy@708 | 1813 |
foozy@708 | 1814 $BMWJLES;2>H!'(B |
foozy@708 | 1815 \hook{precommit} $B!J(B\ref{sec:hook:precommit}~$B@a!K(B |
foozy@708 | 1816 |
foozy@708 | 1817 \subsection{\hook{preupdate}---before updating or merging working directory} |
foozy@708 | 1818 \label{sec:hook:preupdate} |
foozy@708 | 1819 |
foozy@708 | 1820 $B$3$N@)8f%U%C%/$O!"(B |
foozy@708 | 1821 $B:n6HNN0h%G%#%l%/%H%j$K$*$1$k(B \hgcmd{update} $B$J$$$7(B \hgcmd{merge} |
foozy@708 | 1822 $B$N<B;\A0$K<B9T$5$l$^$9!#(B |
foozy@708 | 1823 $B$3$N%U%C%/$O!"(B |
foozy@708 | 1824 Mercurial $B$N(B \hgcmd{update} |
foozy@708 | 1825 $B<B;\A03NG'$,(B \hgcmd{update} $B$J$$$7(B \hgcmd{merge} |
foozy@708 | 1826 $B$r<B9T2DG=$HH=CG$7$?>l9g$K$7$+<B9T$5$l$^$;$s!#(B |
foozy@708 | 1827 $B%U%C%/$N<B9T$,@.8y$7$?>l9g!"(B |
foozy@708 | 1828 \hgcmd{update} $B$J$$$7(B \hgcmd{merge} $B$N<B9T$O7QB3$5$l$^$9$,!"(B |
foozy@708 | 1829 $B%U%C%/$N<B9T$,<:GT$7$?>l9g!"(B |
foozy@708 | 1830 \hgcmd{update} $B$J$$$7(B \hgcmd{merge} $B$O<B9T$5$l$^$;$s!#(B |
foozy@708 | 1831 |
foozy@708 | 1832 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1833 |
foozy@708 | 1834 \begin{description} |
foozy@708 | 1835 \item[\texttt{parent1}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1836 $B:n6HNN0h%G%#%l%/%H%j$,(B \hgcmd{update} $B$5$l$k?F%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1837 $B:n6HNN0h%G%#%l%/%H%j$,(B \hgcmd{merge} $B$5$l$k>l9g$O!"(B |
foozy@708 | 1838 $B8=:_$N?F%A%'%s%8%;%C%H$HF1$8$K$J$j$^$9!#(B |
foozy@708 | 1839 |
foozy@708 | 1840 \item[\texttt{parent2}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1841 $B:n6HNN0h%G%#%l%/%H%j$,(B \hgcmd{merge} $B$5$l$k>l9g$K$N$_@_Dj$5$l$^$9!#(B |
foozy@708 | 1842 $B:n6HNN0h%G%#%l%/%H%j$N(B \hgcmd{merge} $BBP>]$H$J$k%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1843 |
foozy@708 | 1844 \end{description} |
foozy@708 | 1845 |
foozy@708 | 1846 $BMWJLES;2>H!'(B |
foozy@708 | 1847 \hook{update} $B!J(B\ref{sec:hook:update}~$B@a!K(B |
foozy@708 | 1848 |
foozy@708 | 1849 \subsection{\hook{tag}---after tagging a changeset} |
foozy@708 | 1850 \label{sec:hook:tag} |
foozy@708 | 1851 |
foozy@708 | 1852 $B$3$N%U%C%/$O!"%?%0$,@8@.$5$l$?8e$G<B9T$5$l$^$9!#(B |
foozy@708 | 1853 |
foozy@708 | 1854 $B$3$N%U%C%/$KEO$5$l$k%Q%i%a!<%?$O(B: |
foozy@708 | 1855 |
foozy@708 | 1856 \begin{description} |
foozy@708 | 1857 \item[\texttt{local}] $B??56CM!#(B |
foozy@708 | 1858 $B%?%0$,%j%]%8%H%j$KBP$7$F%m!<%+%k$J$b$N(B |
foozy@708 | 1859 $B!J(B\sfilename{.hg/localtags} $B$K>pJs$,3JG<$5$l$k!K$J$N$+!"(B |
foozy@708 | 1860 Mercurial $B$K4IM}$5$l$k$b$N!J(B\sfilename{.hgtags} $B$K>pJs$,3JG<!K(B |
foozy@708 | 1861 $B$J$N$+$rI=$7$^$9!#(B |
foozy@708 | 1862 |
foozy@708 | 1863 \item[\texttt{node}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1864 $B%?%0IU$1$5$l$k%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1865 |
foozy@708 | 1866 \item[\texttt{tag}] $BJ8;zNs!#(B |
foozy@708 | 1867 $B:n@.$5$l$k%?%0$NL>A0!#(B |
foozy@708 | 1868 |
foozy@708 | 1869 \end{description} |
foozy@708 | 1870 |
foozy@708 | 1871 $B@8@.$5$l$k%?%0$,9=@.4IM}BP>]$H$J$k>l9g!"(B |
foozy@708 | 1872 $B$3$N%U%C%/$N<B9T$K@hN)$C$F(B |
foozy@708 | 1873 \hook{commit} $B%U%C%/!J(B\ref{sec:hook:commit}~$B@a!K$,<B9T$5$l$^$9!#(B |
foozy@708 | 1874 |
foozy@708 | 1875 $BMWJLES;2>H!'(B |
foozy@708 | 1876 \hook{pretag} $B!J(B\ref{sec:hook:pretag}~$B@a!K(B |
foozy@708 | 1877 |
foozy@708 | 1878 \subsection{\hook{update}---after updating or merging working directory} |
foozy@708 | 1879 \label{sec:hook:update} |
foozy@708 | 1880 |
foozy@708 | 1881 $B$3$N%U%C%/$O!"(B |
foozy@708 | 1882 $B:n6HNN0h%G%#%l%/%H%j$K$*$1$k(B \hgcmd{update} $B$J$$$7(B \hgcmd{merge} |
foozy@708 | 1883 $B$,40N;$7$?:]$K<B9T$5$l$^$9!#(B |
foozy@708 | 1884 \hgcmd{merge} $B$O<:GT$7F@$k(B |
foozy@708 | 1885 $B!J30It%3%^%s%I$N(B \command{hgmerge} |
foozy@708 | 1886 $B$,3F%U%!%$%k$K$*$1$k>WFM$N2r>C$K<:GT$7$?>l9g!K$N$G!"(B |
foozy@708 | 1887 $B$3$N%U%C%/$K$O(B \hgcmd{update} $B$J$$$7(B \hgcmd{merge} |
foozy@708 | 1888 $B$N@.H]$,EA$($i$l$^$9!#(B |
foozy@708 | 1889 |
foozy@708 | 1890 \begin{description} |
foozy@708 | 1891 \item[\texttt{error}] $B??56CM!#(B |
foozy@708 | 1892 \hgcmd{update} $B$J$$$7(B \hgcmd{merge} $B<B9T$,@.8y$7$?$+H]$+$rI=$7$^$9!#(B |
foozy@708 | 1893 |
foozy@708 | 1894 \item[\texttt{parent1}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1895 $B?7$7$/%3%_%C%H$5$l$?%A%'%s%8%;%C%H$K$H$C$F!"(B |
foozy@708 | 1896 $BBh#1?F$H$J$k%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1897 |
foozy@708 | 1898 \item[\texttt{parent2}] $B%A%'%s%8%;%C%H(BID$B!#(B |
foozy@708 | 1899 $B?7$7$/%3%_%C%H$5$l$?%A%'%s%8%;%C%H$K$H$C$F!"(B |
foozy@708 | 1900 $BBh#2?F$H$J$k%A%'%s%8%;%C%H$N(BID$B!#(B |
foozy@708 | 1901 |
foozy@708 | 1902 \end{description} |
foozy@708 | 1903 |
foozy@708 | 1904 $BMWJLES;2>H!'(B |
foozy@708 | 1905 \hook{preupdate} $B!J(B\ref{sec:hook:preupdate}$B@a!K(B |
foozy@708 | 1906 |
foozy@708 | 1907 %%% Local Variables: |
foozy@708 | 1908 %%% mode: latex |
foozy@708 | 1909 %%% TeX-master: "00book" |
foozy@708 | 1910 %%% End: |