From: rmccabe@sourceware.org <rmccabe@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ ...
Date: 21 May 2009 13:33:23 -0000 [thread overview]
Message-ID: <20090521133323.19286.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL5
Changes by: rmccabe at sourceware.org 2009-05-21 13:33:19
Modified files:
. : conga.spec.in.in
luci/cluster : cluster_config-macros cluster_svc-macros
resource-form-macros resource_form_handlers.js
luci/site/luci/Extensions: LuciClusterInfo.py LuciValidation.py
ResourceHandler.py
luci/site/luci/var: Data.fs
Log message:
- Fix bz469965 (Adding existing fence device fails)
- Fix bz499741 (updating qdisk partition global settings wipes out heuristics)
- Fix bz495109 (Need xen/kvm flag for conga UI)
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.115&r2=1.45.2.116
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_config-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.5&r2=1.3.2.6
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/cluster_svc-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.3.2.11&r2=1.3.2.12
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource-form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.21.2.15&r2=1.21.2.16
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/resource_form_handlers.js.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.20.2.17&r2=1.20.2.18
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciClusterInfo.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.18&r2=1.1.4.19
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/LuciValidation.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6.2.11&r2=1.6.2.12
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ResourceHandler.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.4.7&r2=1.1.4.8
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/var/Data.fs.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.15.2.42&r2=1.15.2.43
--- conga/conga.spec.in.in 2009/05/14 21:05:58 1.45.2.115
+++ conga/conga.spec.in.in 2009/05/21 13:32:03 1.45.2.116
@@ -325,6 +325,8 @@
%changelog
* Thu May 14 2009 Ryan McCabe <rmccabe@redhat.com> 0.12.2-6
- Fix bz469965 (Adding existing fence device fails)
+- Fix bz499741 (updating qdisk partition global settings wipes out heuristics)
+- Fix bz495109 (Need xen/kvm flag for conga UI)
* Thu Apr 23 2009 Ryan McCabe <rmccabe@redhat.com> 0.12.2-5
- Fix bz492392 (Conga Interface for Fence Agents Requires Password even when Password Script is Specified)
--- conga/luci/cluster/cluster_config-macros 2009/02/16 17:23:27 1.3.2.5
+++ conga/luci/cluster/cluster_config-macros 2009/05/21 13:32:03 1.3.2.6
@@ -819,15 +819,14 @@
<tal:block
tal:condition="python: len(heuristics)"
- tal:define="global curHeur python: -1">
+ tal:define="global curHeur python:int(0)">
<input type="hidden" name="num_heuristics" id="num_heuristics"
tal:attributes="value python: len(heuristics)" />
<tr class="systemsTable"
tal:repeat="heuristic heuristics"
- tal:attributes="id python: 'heuristic' + str(curHeur)"
- tal:define="global curHeur python: curHeur + 1">
+ tal:attributes="id python: 'heuristic' + str(curHeur)">
<td class="systemsTable">
<input class="qdpath qdisk" type="text"
@@ -861,6 +860,8 @@
id python: 'heuristic' + str(curHeur) + ':hdel';
name python: 'heuristic' + str(curHeur) + ':hdel'" />
</td>
+
+ <tal:block tal:define="global curHeur python:int(curHeur) + 1" />
</tr>
</tal:block>
</tbody>
--- conga/luci/cluster/cluster_svc-macros 2009/05/14 21:05:58 1.3.2.11
+++ conga/luci/cluster/cluster_svc-macros 2009/05/21 13:32:04 1.3.2.12
@@ -166,6 +166,19 @@
</select>
</td>
</tr>
+
+ <tr class="systemsTable"
+ tal:condition="python:clusterinfo and clusterinfo.get('has_qemu') == True">
+ <td>Hypervisor</td>
+ <td>
+ <select name="hypervisor">
+ <option value="auto"
+ selected="selected">Automatic</option>
+ <option value="qemu">KVM</option>
+ <option value="xen">Xen</option>
+ </select>
+ </td>
+ </tr>
<tal:block metal:use-macro="here/cluster_svc-macros/macros/failover-prefs-macro" />
@@ -207,6 +220,9 @@
<input type="hidden" name="oldname"
tal:attributes="value sinfo/name | nothing" />
+ <tal:block tal:define="
+ global clusterinfo python: here.getClusterInfo(modelb, request)" />
+
<div class="service_comp_list">
<table class="systemsTable">
<thead class="systemsTable">
@@ -295,6 +311,23 @@
</td>
</tr>
+ <tr class="systemsTable"
+ tal:condition="python:clusterinfo and clusterinfo.get('has_qemu') == True">
+ <td>Hypervisor</td>
+ <td>
+ <select name="hypervisor">
+ <option value="auto"
+ tal:content="string:Automatic"
+ tal:attributes="selected python:(not sinfo.get('hypervisor') or sinfo.get('hypervisor') == 'auto') and 'selected' or ''" />
+ <option value="qemu"
+ tal:content="string:KVM"
+ tal:attributes="selected python:(sinfo.get('hypervisor') == 'qemu') and 'selected' or ''" />
+ <option value="xen"
+ tal:content="string:Xen"
+ tal:attributes="selected python:(sinfo.get('hypervisor') == 'xen') and 'selected' or ''" />
+ </td>
+ </tr>
+
<tal:block metal:use-macro="here/cluster_svc-macros/macros/failover-prefs-macro" />
<tr class="systemsTable"><td colspan="2">
@@ -577,7 +610,7 @@
<tr class="systemsTable">
<td>Recovery policy</td>
<td>
- <select name="recovery">
+ <select name="recovery" onchange="set_recovery_type(this.form)">
<option value="">Select a recovery policy</option>
<option name="relocate" value="relocate"
tal:content="string:Relocate"
--- conga/luci/cluster/resource-form-macros 2008/07/30 21:14:38 1.21.2.15
+++ conga/luci/cluster/resource-form-macros 2009/05/21 13:32:04 1.21.2.16
@@ -147,7 +147,7 @@
<option name="SAPDatabase" value="SAPDatabase">SAP Database</option>
<option name="SAPInstance" value="SAPInstance">SAP Instance</option>
- <tal:block tal:condition="python:clusterinfo and clusterinfo['os_major'] == 5 and clusterinfo['os_minor'] > 1">
+ <tal:block tal:condition="python:clusterinfo and clusterinfo.get('has_sybase_agent') == True">
<option name="ASEHAagent" value="ASEHAagent">Sybase ASE Failover Instance</option>
</tal:block>
<option name="oracledb" value="oracledb">Oracle 10g Failover Instance</option>
@@ -203,7 +203,7 @@
<option name="SAPDatabase" value="SAPDatabase">SAP Database</option>
<option name="SAPInstance" value="SAPInstance">SAP Instance</option>
- <tal:block tal:condition="python:clusterinfo and clusterinfo['os_major'] == 5 and clusterinfo['os_minor'] > 1">
+ <tal:block tal:condition="python:clusterinfo and clusterinfo.get('has_sybase_agent') == True">
<option name="ASEHAagent" value="ASEHAagent">Sybase ASE Failover Instance</option>
</tal:block>
@@ -286,9 +286,13 @@
<script type="text/javascript">
set_page_title('Luci ??? cluster ??? resources ??? Resource details');
</script>
+
<tal:block
tal:define="global res python: here.getResourceInfo(modelb, request)" />
+ <tal:block tal:define="
+ global clusterinfo python: here.getClusterInfo(modelb, request)" />
+
<h2>Resource details for <span tal:replace="res/name" /></h2>
<table class="systemsTable">
@@ -327,6 +331,9 @@
src="/luci/cluster/resource_form_handlers.js">
</script>
+ <tal:block tal:define="
+ global clusterinfo python: here.getClusterInfo(modelb, request)" />
+
<tal:block tal:define="global resourcename request/resourcename | request/form/resourcename | nothing" />
<tal:block tal:condition="resourcename"
@@ -1329,6 +1336,7 @@
value res/attrs/DIR_PROFILE | nothing" />
</td>
</tr>
+
<tr class="systemsTable">
<td class="systemsTable">Name of the SAP START profile</td>
<td class="systemsTable">
@@ -1338,6 +1346,84 @@
value res/attrs/START_PROFILE | nothing" />
</td>
</tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="After that time in seconds a monitor operation is executed by the resource agent. Does the monitor return SUCCESS, the start is handled as SUCCESS. This is useful to resolve timing problems with e.g. the J2EE-Addin instance.">Number of seconds to wait before checking startup status</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="START_WAITTIME"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/START_WAITTIME | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="The SAPInstance resource agent tries to recover a failed start attempt automaticaly one time. This is done by killing runing instance processes and executing cleanipc.">Enable automatic startup recovery</span>
+ </td>
+ <td class="systemsTable">
+ <input type="checkbox" name="AUTOMATIC_RECOVER"
+ tal:attributes="
+ disabled python: editDisabled;
+ checked res/attrs/AUTOMATIC_RECOVER | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="The fully qualified path where to find a script or program which should be executed before this resource gets started.">Path to a pre-start script</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="PRE_START_USEREXIT"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/PRE_START_USEREXIT | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="The fully qualified path where to find a script or program which should be executed after this resource got started.">Path to a post-start script</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="POST_START_USEREXIT"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/POST_START_USEREXIT | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="The fully qualified path where to find a script or program which should be executed before this resource gets stopped.">Path to a pre-stop script</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="PRE_STOP_USEREXIT"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/PRE_STOP_USEREXIT | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="The fully qualified path where to find a script or program which should be executed after this resource got stopped.">Path to a post-stop script</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="POST_STOP_USEREXIT"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/POST_STOP_USEREXIT | nothing" />
+ </td>
+ </tr>
</table>
<div metal:use-macro="here/resource-form-macros/macros/res_form_footer" />
</form>
@@ -1665,6 +1751,106 @@
</td>
</tr>
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">Application Level Monitoring</td>
+ <td class="systemsTable">
+ <input type="checkbox" name="STRICT_MONITORING"
+ tal:attributes="
+ disabled python: editDisabled;
+ checked res/attrs/STRICT_MONITORING | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">Automatic Startup Recovery</td>
+ <td class="systemsTable">
+ <input type="checkbox" name="AUTOMATIC_RECOVER"
+ tal:attributes="
+ disabled python: editDisabled;
+ checked res/attrs/AUTOMATIC_RECOVER | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="The fully qualified path to the Java SDK">Path to Java SDK</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="JAVA_HOME"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/JAVA_HOME | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="The fully qualified filename of the jdbc driver for the database connection test. It will be automaticaly read from the bootstrap.properties file in Java engine 6.40 and 7.00. For Java engine 7.10 the parameter is mandatory">File name of the JDBC driver</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="DB_JARS"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/DB_JARS | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="The fully qualified path where to find a script or program which should be executed before this resource gets started.">Path to a pre-start script</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="PRE_START_USEREXIT"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/PRE_START_USEREXIT | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="The fully qualified path where to find a script or program which should be executed after this resource got started.">Path to a post-start script</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="POST_START_USEREXIT"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/POST_START_USEREXIT | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="The fully qualified path where to find a script or program which should be executed before this resource gets stopped.">Path to a pre-stop script</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="PRE_STOP_USEREXIT"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/PRE_STOP_USEREXIT | nothing" />
+ </td>
+ </tr>
+
+ <tr tal:condition="python:clusterinfo and clusterinfo.get('sap_agent_v19') == True"
+ class="systemsTable">
+ <td class="systemsTable">
+ <span title="The fully qualified path where to find a script or program which should be executed after this resource got stopped.">Path to a post-stop script</span>
+ </td>
+ <td class="systemsTable">
+ <input type="text" size="20" name="POST_STOP_USEREXIT"
+ tal:attributes="
+ disabled python: editDisabled;
+ value res/attrs/POST_STOP_USEREXIT | nothing" />
+ </td>
+ </tr>
+
<tr class="systemsTable">
<td class="systemsTable">
<span title="The fully qualified path to the J2EE instance bootstrap directory">J2EE instance bootstrap directory</span>
--- conga/luci/cluster/resource_form_handlers.js 2009/04/27 21:03:32 1.20.2.17
+++ conga/luci/cluster/resource_form_handlers.js 2009/05/21 13:32:04 1.20.2.18
@@ -471,6 +471,17 @@
var submit_btn = null;
+function set_recovery_type(form) {
+ recovery = form.recovery.options[form.recovery.options.selectedIndex].value;
+ if (recovery != 'restart') {
+ form.max_restarts.disabled = true;
+ form.restart_expire_time.disabled = true;
+ } else {
+ form.max_restarts.disabled = false;
+ form.restart_expire_time.disabled = false;
+ }
+}
+
function forms_to_xml(submit_button, master_form) {
var errors = new Array();
var form_xml = '';
--- conga/luci/site/luci/Extensions/LuciClusterInfo.py 2009/04/27 21:03:32 1.1.4.18
+++ conga/luci/site/luci/Extensions/LuciClusterInfo.py 2009/05/21 13:32:04 1.1.4.19
@@ -603,17 +603,25 @@
clumap = {}
clumap['has_ignore_undef_fence'] = False
+ clumap['sap_agent_v19'] = False
+ clumap['has_qemu'] = False
+ clumap['has_sybase_agent'] = False
try:
cluster_os = model.getClusterOS()
if cluster_os.find('Tikanga') != -1:
clumap['os_major'] = 5
os_minor = int(cluster_os[cluster_os.find('5.') + 2])
clumap['os_minor'] = os_minor
+ if os_minor > 0:
+ clumap['has_sybase_agent'] = True
if os_minor > 1:
clumap['vm_migration_choice'] = True
if os_minor > 2:
clumap['has_fence_ssh'] = True
#clumap['has_ignore_undef_fence'] = True
+ if os_minor > 3:
+ clumap['sap_agent_v19'] = True
+ clumap['has_qemu'] = True
elif cluster_os.find('Nahant') != -1:
clumap['os_major'] = 4
os_minor = int(cluster_os[cluster_os.find('Update ') + 7])
--- conga/luci/site/luci/Extensions/LuciValidation.py 2009/04/27 21:03:32 1.6.2.11
+++ conga/luci/site/luci/Extensions/LuciValidation.py 2009/05/21 13:32:04 1.6.2.12
@@ -1108,7 +1108,7 @@
def validate_vmsvc_form(model, request):
errors = list()
- fvar = GetReqVars(request, [ 'vmname', 'oldname', 'vmpath', 'recovery', 'domain', 'migration_type', 'max_restarts', 'restart_expire_time', 'migration_mapping'])
+ fvar = GetReqVars(request, [ 'vmname', 'oldname', 'vmpath', 'recovery', 'domain', 'migration_type', 'max_restarts', 'restart_expire_time', 'migration_mapping', 'hypervisor' ])
vm_name = fvar['vmname']
if vm_name is None:
@@ -1227,6 +1227,14 @@
except:
pass
+ hypervisor = fvar['hypervisor']
+ if hypervisor == 'xen':
+ xvm.addAttribute('hypervisor', 'xen')
+ elif hypervisor == 'qemu':
+ xvm.addAttribute('hypervisor', 'qemu')
+ else:
+ xvm.removeAttribute('hypervisor')
+
fdom = fvar['domain']
if fdom:
xvm.addAttribute('domain', fdom)
--- conga/luci/site/luci/Extensions/ResourceHandler.py 2009/01/23 19:33:29 1.1.4.7
+++ conga/luci/site/luci/Extensions/ResourceHandler.py 2009/05/21 13:32:04 1.1.4.8
@@ -710,13 +710,14 @@
if LUCI_DEBUG_MODE is True:
luci_log.debug_verbose('addSAPD1: %s' % err)
- if form.has_key('DBJ2EE_ONLY'):
- res.addAttribute('DBJ2EE_ONLY', 'TRUE')
- else:
- res.removeAttribute('DBJ2EE_ONLY')
-
+ for param in ( 'DBJ2EE_ONLY', 'AUTOMATIC_RECOVER', 'STRICT_MONITORING' ):
+ if form.has_key(param):
+ res.addAttribute(param, 'true')
+ else:
+ res.removeAttribute(param)
+
# Optional string parameters
- for param in ( 'DIR_EXECUTABLE', 'NETSERVICENAME', 'DIR_BOOTSTRAP', 'DIR_SECSTORE' ):
+ for param in ( 'DIR_EXECUTABLE', 'NETSERVICENAME', 'DIR_BOOTSTRAP', 'DIR_SECSTORE', 'JAVA_HOME', 'DB_JARS', 'PRE_START_USEREXIT', 'POST_START_USEREXIT', 'PRE_STOP_USEREXIT', 'POST_STOP_USEREXIT' ):
try:
pval = form[param].strip()
if not pval:
@@ -737,8 +738,13 @@
res.removeAttribute('name')
res.addAttribute('InstanceName', rname)
+ if form.has_key('AUTOMATIC_RECOVER'):
+ res.addAttribute('AUTOMATIC_RECOVER', 'true')
+ else:
+ res.removeAttribute('AUTOMATIC_RECOVER')
+
# Optional string parameters
- for param in ( 'DIR_EXECUTABLE', 'DIR_PROFILE', 'START_PROFILE' ):
+ for param in ( 'DIR_EXECUTABLE', 'DIR_PROFILE', 'START_PROFILE', 'PRE_START_USEREXIT', 'POST_START_USEREXIT', 'PRE_STOP_USEREXIT', 'POST_STOP_USEREXIT', 'START_WAITTIME' ):
try:
pval = form[param].strip()
if not pval:
Binary files /cvs/cluster/conga/luci/site/luci/var/Data.fs 2009/03/24 20:08:19 1.15.2.42 and /cvs/cluster/conga/luci/site/luci/var/Data.fs 2009/05/21 13:32:05 1.15.2.43 differ
rcsdiff: /cvs/cluster/conga/luci/site/luci/var/Data.fs: diff failed
next reply other threads:[~2009-05-21 13:33 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-21 13:33 rmccabe [this message]
-- strict thread matches above, loose matches on Subject: below --
2010-09-29 17:08 [Cluster-devel] conga ./conga.spec.in.in luci/cluster/cluster_ rmccabe
2009-05-14 21:05 rmccabe
2009-04-27 21:03 rmccabe
2009-04-15 16:07 rmccabe
2009-03-24 20:06 rmccabe
2009-02-16 17:23 rmccabe
2008-09-18 15:20 rmccabe
2008-08-07 18:08 rmccabe
2008-07-14 21:52 rmccabe
2008-03-12 15:13 rmccabe
2008-02-27 20:22 rmccabe
2008-02-08 21:57 rmccabe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090521133323.19286.qmail@sourceware.org \
--to=rmccabe@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.