From: kupcevic@sourceware.org <kupcevic@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga ./conga.spec.in.in luci/cluster/form-mac ...
Date: 12 Dec 2006 13:26:29 -0000 [thread overview]
Message-ID: <20061212132629.29463.qmail@sourceware.org> (raw)
CVSROOT: /cvs/cluster
Module name: conga
Branch: RHEL5
Changes by: kupcevic at sourceware.org 2006-12-12 13:26:24
Modified files:
. : conga.spec.in.in
luci/cluster : form-macros
luci/site/luci/Extensions: ricci_bridge.py
ricci/common : File.cpp
ricci/docs : storage_api.html
ricci/modules/storage: LV.cpp LVM.cpp LVM.h PV.cpp
StorageModule.cpp VG.cpp
Added files:
ricci/test_suite/storage: disable_clustered_lvm.xml
enable_clustered_lvm.xml
Log message:
Fixed bz217703 (clustered vg creation fails)
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/conga.spec.in.in.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.45.2.10&r2=1.45.2.11
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/cluster/form-macros.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.90.2.8&r2=1.90.2.9
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/ricci_bridge.py.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.30.2.12&r2=1.30.2.13
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/common/File.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.2&r2=1.1.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/storage_api.html.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LV.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.6&r2=1.6.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVM.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.7.2.2&r2=1.7.2.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/LVM.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/PV.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4&r2=1.4.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/StorageModule.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.5&r2=1.5.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/storage/VG.cpp.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8&r2=1.8.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/disable_clustered_lvm.xml.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/test_suite/storage/enable_clustered_lvm.xml.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=NONE&r2=1.1.2.1
--- conga/conga.spec.in.in 2006/12/12 05:21:34 1.45.2.10
+++ conga/conga.spec.in.in 2006/12/12 13:26:23 1.45.2.11
@@ -297,6 +297,7 @@
- Fixed bz218040 (luci reports "unknown" as cluster name if cluster creation fails)
- Fixed bz218941 (Conga/luci - cannot add node to cluster via luci web app)
- Fixed bz219156 (Errors in performing node-specific tasks due to ricci outage not reflected in luci display)
+- Fixed bz217703 (clustered vg creation fails)
* Thu Nov 16 2006 Stanko Kupcevic <kupcevic@redhat.com> 0.8-25
- Fix build issues (D-BUS detection)
--- conga/luci/cluster/form-macros 2006/12/11 23:57:59 1.90.2.8
+++ conga/luci/cluster/form-macros 2006/12/12 13:26:23 1.90.2.9
@@ -45,8 +45,7 @@
<img src="rebooted.png" alt="[cluster node rebooted]" />
</span>
- <span tal:condition="
- python: nodereport['statusindex'] == 4 or nodereport['statusindex'] == 5">
+ <span tal:condition="python: nodereport['statusindex'] == 4 or nodereport['statusindex'] == 5">
<img src="configured.png" alt="[cluster node configured]" />
</span>
--- conga/luci/site/luci/Extensions/ricci_bridge.py 2006/12/11 23:58:00 1.30.2.12
+++ conga/luci/site/luci/Extensions/ricci_bridge.py 2006/12/12 13:26:23 1.30.2.13
@@ -43,15 +43,16 @@
return (-1, err_msg)
def addClusterNodeBatch(os_str,
- cluster_name,
- install_base,
- install_services,
- install_shared_storage,
- install_LVS,
- upgrade_rpms):
-
+ cluster_name,
+ install_base,
+ install_services,
+ install_shared_storage,
+ install_LVS,
+ upgrade_rpms):
+
batch = '<?xml version="1.0" ?>'
batch += '<batch>'
+
batch += '<module name="rpm">'
batch += '<request API_version="1.0">'
batch += '<function_call name="install">'
@@ -61,9 +62,7 @@
else:
batch += 'false'
batch += '"/>'
-
batch += '<var name="sets" type="list_xml">'
-
if install_base or install_services or install_shared_storage:
batch += '<set name="Cluster Base"/>'
if install_services:
@@ -72,45 +71,42 @@
batch += '<set name="Clustered Storage"/>'
if install_LVS:
batch += '<set name="Linux Virtual Server"/>'
-
batch += '</var>'
batch += '</function_call>'
batch += '</request>'
batch += '</module>'
-
+
+ batch += '<module name="service">'
+ batch += '<request API_version="1.0">'
+ batch += '<function_call name="disable">'
+ batch += '<var mutable="false" name="services" type="list_xml">'
+ if install_base or install_services or install_shared_storage:
+ batch += '<set name="Cluster Base"/>'
+ if install_services:
+ batch += '<set name="Cluster Service Manager"/>'
+ if install_shared_storage:
+ batch += '<set name="Clustered Storage"/>'
+ if install_LVS:
+ batch += '<set name="Linux Virtual Server"/>'
+ batch += '</var>'
+ batch += '</function_call>'
+ batch += '</request>'
+ batch += '</module>'
+
need_reboot = install_base or install_services or install_shared_storage or install_LVS
if need_reboot:
- batch += '<module name="service">'
- batch += '<request API_version="1.0">'
- batch += '<function_call name="disable">'
- batch += '<var mutable="false" name="services" type="list_xml">'
- if os_str == 'rhel4':
- batch += '<service name="ccsd"/>'
- batch += '<service name="cman"/>'
- batch += '</var>'
- batch += '</function_call>'
- batch += '</request>'
- batch += '</module>'
-
batch += '<module name="reboot">'
batch += '<request API_version="1.0">'
batch += '<function_call name="reboot_now"/>'
batch += '</request>'
batch += '</module>'
else:
- # need 2 placeholders instead of disable services / reboot
batch += '<module name="rpm">'
batch += '<request API_version="1.0">'
batch += '<function_call name="install"/>'
batch += '</request>'
batch += '</module>'
-
- batch += '<module name="rpm">'
- batch += '<request API_version="1.0">'
- batch += '<function_call name="install"/>'
- batch += '</request>'
- batch += '</module>'
-
+
batch += '<module name="cluster">'
batch += '<request API_version="1.0">'
batch += '<function_call name="set_cluster.conf">'
@@ -127,27 +123,20 @@
batch += '</function_call>'
batch += '</request>'
batch += '</module>'
-
- if need_reboot:
- batch += '<module name="service">'
+
+ if install_shared_storage:
+ batch += '<module name="storage">'
batch += '<request API_version="1.0">'
- batch += '<function_call name="enable">'
- batch += '<var mutable="false" name="services" type="list_xml">'
- if os_str == 'rhel4':
- batch += '<service name="ccsd"/>'
- batch += '<service name="cman"/>'
- batch += '</var>'
- batch += '</function_call>'
+ batch += '<function_call name="enable_clustered_lvm"/>'
batch += '</request>'
batch += '</module>'
else:
- # placeholder instead of enable services
batch += '<module name="rpm">'
batch += '<request API_version="1.0">'
batch += '<function_call name="install"/>'
batch += '</request>'
batch += '</module>'
-
+
batch += '<module name="cluster">'
batch += '<request API_version="1.0">'
batch += '<function_call name="start_node"/>'
@@ -157,18 +146,19 @@
return minidom.parseString(batch).firstChild
-def createClusterBatch( os_str,
- cluster_name,
- cluster_alias,
- nodeList,
- install_base,
- install_services,
- install_shared_storage,
- install_LVS,
- upgrade_rpms):
-
+def createClusterBatch(os_str,
+ cluster_name,
+ cluster_alias,
+ nodeList,
+ install_base,
+ install_services,
+ install_shared_storage,
+ install_LVS,
+ upgrade_rpms):
+
batch = '<?xml version="1.0" ?>'
batch += '<batch>'
+
batch += '<module name="rpm">'
batch += '<request API_version="1.0">'
batch += '<function_call name="install">'
@@ -179,7 +169,6 @@
batch += 'false'
batch += '"/>'
batch += '<var name="sets" type="list_xml">'
-
if install_base or install_services or install_shared_storage:
batch += '<set name="Cluster Base"/>'
if install_services:
@@ -192,40 +181,38 @@
batch += '</function_call>'
batch += '</request>'
batch += '</module>'
-
+
+ batch += '<module name="service">'
+ batch += '<request API_version="1.0">'
+ batch += '<function_call name="disable">'
+ batch += '<var mutable="false" name="services" type="list_xml">'
+ if install_base or install_services or install_shared_storage:
+ batch += '<set name="Cluster Base"/>'
+ if install_services:
+ batch += '<set name="Cluster Service Manager"/>'
+ if install_shared_storage:
+ batch += '<set name="Clustered Storage"/>'
+ if install_LVS:
+ batch += '<set name="Linux Virtual Server"/>'
+ batch += '</var>'
+ batch += '</function_call>'
+ batch += '</request>'
+ batch += '</module>'
+
need_reboot = install_base or install_services or install_shared_storage or install_LVS
if need_reboot:
- batch += '<module name="service">'
- batch += '<request API_version="1.0">'
- batch += '<function_call name="disable">'
- batch += '<var mutable="false" name="services" type="list_xml">'
- if os_str == 'rhel4':
- batch += '<service name="ccsd"/>'
- batch += '<service name="cman"/>'
- batch += '</var>'
- batch += '</function_call>'
- batch += '</request>'
- batch += '</module>'
-
batch += '<module name="reboot">'
batch += '<request API_version="1.0">'
batch += '<function_call name="reboot_now"/>'
batch += '</request>'
batch += '</module>'
else:
- # need 2 placeholders instead of disable services / reboot
batch += '<module name="rpm">'
batch += '<request API_version="1.0">'
batch += '<function_call name="install"/>'
batch += '</request>'
batch += '</module>'
-
- batch += '<module name="rpm">'
- batch += '<request API_version="1.0">'
- batch += '<function_call name="install"/>'
- batch += '</request>'
- batch += '</module>'
-
+
batch += '<module name="cluster">'
batch += '<request API_version="1.0">'
batch += '<function_call name="set_cluster.conf">'
@@ -233,9 +220,7 @@
batch += '<var mutable="false" name="cluster.conf" type="xml">'
batch += '<cluster config_version="1" name="' + cluster_name + '" alias="' + cluster_alias + '">'
batch += '<fence_daemon post_fail_delay="0" post_join_delay="3"/>'
-
batch += '<clusternodes>'
-
x = 1
for i in nodeList:
if os_str == "rhel4":
@@ -243,14 +228,11 @@
else:
batch += '<clusternode name="' + i + '" votes="1" nodeid="' + str(x) + '" />'
x = x + 1
-
batch += '</clusternodes>'
-
if len(nodeList) == 2:
batch += '<cman expected_votes="1" two_node="1"/>'
else:
batch += '<cman/>'
-
batch += '<fencedevices/>'
batch += '<rm/>'
batch += '</cluster>'
@@ -258,27 +240,20 @@
batch += '</function_call>'
batch += '</request>'
batch += '</module>'
-
- if need_reboot:
- batch += '<module name="service">'
+
+ if install_shared_storage:
+ batch += '<module name="storage">'
batch += '<request API_version="1.0">'
- batch += '<function_call name="enable">'
- batch += '<var mutable="false" name="services" type="list_xml">'
- if os_str == 'rhel4':
- batch += '<service name="ccsd"/>'
- batch += '<service name="cman"/>'
- batch += '</var>'
- batch += '</function_call>'
+ batch += '<function_call name="enable_clustered_lvm"/>'
batch += '</request>'
batch += '</module>'
else:
- # placeholder instead of enable services
batch += '<module name="rpm">'
batch += '<request API_version="1.0">'
batch += '<function_call name="install"/>'
batch += '</request>'
batch += '</module>'
-
+
batch += '<module name="cluster">'
batch += '<request API_version="1.0">'
batch += '<function_call name="start_node">'
--- conga/ricci/common/File.cpp 2006/10/24 21:57:36 1.1.2.2
+++ conga/ricci/common/File.cpp 2006/12/12 13:26:23 1.1.2.3
@@ -51,7 +51,7 @@
bool rw)
{
if (access(filepath.c_str(), R_OK))
- throw String("missing file ") + filepath;
+ throw String("unable to read file ") + filepath;
ios_base::openmode mode = ios_base::in;
if (rw)
mode |= ios_base::out;
--- conga/ricci/docs/storage_api.html 2006/10/16 20:26:48 1.5
+++ conga/ricci/docs/storage_api.html 2006/12/12 13:26:24 1.5.2.1
@@ -374,6 +374,30 @@
especially unmount error if content fails to unmount</P>
</UL>
</UL>
+ <LI><P>enable_clustered_lvm</P>
+ <UL>
+ <P>Enable LVM's cluster locking.
+ It is an error to call this function if lvm2-cluster
+ is not installed.
+ </P>
+ <P>No input variables.
+ </P>
+ <P>No output variables.</P>
+ <P>On failure:<BR>- No special errors defined, only generic ones
+ might get returned.</P>
+ </UL>
+ <LI><P>disable_clustered_lvm</P>
+ <UL>
+ <P>Disable LVM's cluster locking.
+ It is an error to call this function if lvm2-cluster
+ is not installed.
+ </P>
+ <P>No input variables.
+ </P>
+ <P>No output variables.</P>
+ <P>On failure:<BR>- No special errors defined, only generic ones
+ might get returned.</P>
+ </UL>
<P ALIGN=LEFT><BR><BR>
</P>
</BODY>
--- conga/ricci/modules/storage/LV.cpp 2006/09/26 01:16:13 1.6
+++ conga/ricci/modules/storage/LV.cpp 2006/12/12 13:26:24 1.6.2.1
@@ -45,7 +45,7 @@
// if VG is marked as clustered, but cluster locking is not available, throw
- if (!LVM::clustered_available() &&
+ if (!LVM::clustered_enabled() &&
bd_temp.props.get("clustered").get_bool())
throw ClvmdError();
@@ -183,7 +183,7 @@
{
// if VG is marked as clustered, but cluster locking is not available, throw
if (_props.get("clustered").get_bool() &&
- !LVM::clustered_available())
+ !LVM::clustered_enabled())
throw ClvmdError();
// snapshots neither resize nor replace content, see LV()
@@ -247,7 +247,7 @@
{
// if VG is marked as clustered, but cluster locking is not available, throw
if (_props.get("clustered").get_bool() &&
- !LVM::clustered_available())
+ !LVM::clustered_enabled())
throw ClvmdError();
content->remove();
--- conga/ricci/modules/storage/LVM.cpp 2006/11/29 18:26:53 1.7.2.2
+++ conga/ricci/modules/storage/LVM.cpp 2006/12/12 13:26:24 1.7.2.3
@@ -83,6 +83,9 @@
+static String LVMCONF_PATH("/usr/sbin/lvmconf");
+
+
// pvs
static String PVS_OPTIONS = "pv_name,vg_name,pv_size,pv_free,pv_attr,pv_fmt,pv_uuid,vg_extent_size";
static unsigned int PVS_NAME_IDX = 0;
@@ -437,7 +440,7 @@
const list<String>& pv_paths)
{
if (clustered &&
- !clustered_available())
+ !clustered_enabled())
throw ClvmdError();
vector<String> args;
@@ -520,7 +523,7 @@
bool clustered)
{
if (clustered &&
- !clustered_available())
+ !clustered_enabled())
throw ClvmdError();
vector<String> args;
@@ -642,12 +645,39 @@
bool
-LVM::clustered_available()
+LVM::clustered_enabled()
{
String locking_type = get_locking_type();
return (locking_type == "2" || locking_type == "3");
}
+void
+LVM::enable_clustered()
+{
+ String out, err;
+ int status;
+ vector<String> args;
+ args.push_back("--enable-cluster");
+ if (utils::execute(LVMCONF_PATH, args, out, err, status, false))
+ throw command_not_found_error_msg(LVMCONF_PATH);
+ if (status != 0)
+ throw String("Failed to enable LVM's clustered locking");
+}
+
+void
+LVM::disable_clustered()
+{
+ String out, err;
+ int status;
+ vector<String> args;
+ args.push_back("--disable-cluster");
+ if (utils::execute(LVMCONF_PATH, args, out, err, status, false))
+ throw command_not_found_error_msg(LVMCONF_PATH);
+ if (status != 0)
+ throw String("Failed to disable LVM's clustered locking");
+}
+
+
bool
cluster_quorate()
{
@@ -714,7 +744,7 @@
void
LVM::check_locking()
{
- if (clustered_available()) {
+ if (clustered_enabled()) {
if (!cluster_quorate())
throw ClusterNotQuorateError();
--- conga/ricci/modules/storage/LVM.h 2006/08/10 22:53:09 1.4
+++ conga/ricci/modules/storage/LVM.h 2006/12/12 13:26:24 1.4.2.1
@@ -73,9 +73,11 @@
static void lvreduce(const String& path, long long new_size);
static void lvextend(const String& path, long long new_size);
- static void check_locking();
- static bool clustered_available();
static bool vg_clustered(const String& vgname);
+ static void check_locking();
+ static bool clustered_enabled();
+ static void enable_clustered();
+ static void disable_clustered();
};
--- conga/ricci/modules/storage/PV.cpp 2006/08/10 22:53:09 1.4
+++ conga/ricci/modules/storage/PV.cpp 2006/12/12 13:26:24 1.4.2.1
@@ -94,7 +94,7 @@
// if VG is marked as clustered, but cluster locking is not available, throw
- if (!LVM::clustered_available() &&
+ if (!LVM::clustered_enabled() &&
LVM::vg_clustered(vgname))
throw ClvmdError();
@@ -121,7 +121,7 @@
// if VG is marked as clustered, but cluster locking is not available, throw
- if (!LVM::clustered_available() &&
+ if (!LVM::clustered_enabled() &&
(LVM::vg_clustered(vgname_old) ||
LVM::vg_clustered(vgname_new)))
throw ClvmdError();
@@ -153,7 +153,7 @@
// if VG is marked as clustered, but cluster locking is not available, throw
- if (!LVM::clustered_available() &&
+ if (!LVM::clustered_enabled() &&
LVM::vg_clustered(vgname))
throw ClvmdError();
--- conga/ricci/modules/storage/StorageModule.cpp 2006/10/16 20:26:48 1.5
+++ conga/ricci/modules/storage/StorageModule.cpp 2006/12/12 13:26:24 1.5.2.1
@@ -24,6 +24,7 @@
#include "StorageModule.h"
#include "MapperFactory.h"
#include "BDFactory.h"
+#include "LVM.h"
using namespace std;
@@ -47,6 +48,9 @@
static VarMap modify_bd(const VarMap& args);
static VarMap remove_bd(const VarMap& args);
+static VarMap enable_clustered_lvm(const VarMap& args);
+static VarMap disable_clustered_lvm(const VarMap& args);
+
static ApiFcnMap build_fcn_map();
@@ -80,6 +84,9 @@
api_1_0["modify_bd"] = modify_bd;
api_1_0["remove_bd"] = remove_bd;
+ api_1_0["enable_clustered_lvm"] = enable_clustered_lvm;
+ api_1_0["disable_clustered_lvm"] = disable_clustered_lvm;
+
ApiFcnMap api_fcn_map;
api_fcn_map["1.0"] = api_1_0;
@@ -463,3 +470,21 @@
return temp_list;
}
+
+VarMap
+enable_clustered_lvm(const VarMap& args)
+{
+ LVM::enable_clustered();
+
+ VarMap ret;
+ return ret;
+}
+
+VarMap
+disable_clustered_lvm(const VarMap& args)
+{
+ LVM::disable_clustered();
+
+ VarMap ret;
+ return ret;
+}
--- conga/ricci/modules/storage/VG.cpp 2006/10/16 15:32:25 1.8
+++ conga/ricci/modules/storage/VG.cpp 2006/12/12 13:26:24 1.8.2.1
@@ -207,7 +207,7 @@
{
// if VG is marked as clustered, but cluster locking is not available, throw
if (_props.get("clustered").get_bool() &&
- !LVM::clustered_available())
+ !LVM::clustered_enabled())
throw ClvmdError();
String vgname;
@@ -252,7 +252,7 @@
{
// if VG is marked as clustered, but cluster locking is not available, throw
if (_props.get("clustered").get_bool() &&
- !LVM::clustered_available())
+ !LVM::clustered_enabled())
throw ClvmdError();
String vgname = _props.get("vgname").get_string();
@@ -278,7 +278,7 @@
bool clustered = temp.props.get("clustered").get_bool();
if (clustered &&
- !LVM::clustered_available())
+ !LVM::clustered_enabled())
throw ClvmdError();
try {
/cvs/cluster/conga/ricci/test_suite/storage/disable_clustered_lvm.xml,v --> standard output
revision 1.1.2.1
--- conga/ricci/test_suite/storage/disable_clustered_lvm.xml
+++ - 2006-12-12 13:26:29.527944000 +0000
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<ricci version="1.0" function="process_batch" async="false">
+<batch>
+
+<module name="storage">
+<request sequence="1254" API_version="1.0">
+<function_call name="disable_clustered_lvm" />
+</request>
+</module>
+
+</batch>
+</ricci>
+
/cvs/cluster/conga/ricci/test_suite/storage/enable_clustered_lvm.xml,v --> standard output
revision 1.1.2.1
--- conga/ricci/test_suite/storage/enable_clustered_lvm.xml
+++ - 2006-12-12 13:26:29.742621000 +0000
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<ricci version="1.0" function="process_batch" async="false">
+<batch>
+
+<module name="storage">
+<request sequence="1254" API_version="1.0">
+<function_call name="enable_clustered_lvm" />
+</request>
+</module>
+
+</batch>
+</ricci>
+
next reply other threads:[~2006-12-12 13:26 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-12 13:26 kupcevic [this message]
-- strict thread matches above, loose matches on Subject: below --
2009-01-26 17:01 [Cluster-devel] conga ./conga.spec.in.in luci/cluster/form-mac rmccabe
2007-11-06 19:58 rmccabe
2007-09-21 3:24 rmccabe
2007-08-27 18:38 rmccabe
2007-08-23 18:47 rmccabe
2006-12-08 20:47 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=20061212132629.29463.qmail@sourceware.org \
--to=kupcevic@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.