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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).