[openrtm-commit:03238] r957 - in branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist: . examples/SeqIO ext/sdo/observer
openrtm @ openrtm.org
openrtm @ openrtm.org
2018年 3月 12日 (月) 19:19:44 JST
Author: kawauchi
Date: 2018-03-12 19:19:44 +0900 (Mon, 12 Mar 2018)
New Revision: 957
Modified:
branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/BufferBase.py
branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ManagerConfig.py
branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ManagerServant.py
branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/PortAdmin.py
branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/PortBase.py
branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/Properties.py
branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/RTObject.py
branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/RingBuffer.py
branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/examples/SeqIO/SeqIn.py
branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/examples/SeqIO/SeqOut.py
branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py
Log:
[merge] r941-956 have been merged from trunk.
Modified: branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/BufferBase.py
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/BufferBase.py 2018-03-05 06:00:36 UTC (rev 956)
+++ branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/BufferBase.py 2018-03-12 10:19:44 UTC (rev 957)
@@ -173,7 +173,8 @@
#
# ¸½ºß¤Î½ñ¤¹þ¤ß°ÌÃ֤Υݥ¤¥ó¥¿¤ò n ¸Ä¿Ê¤á¤ë¡£
#
- # @param n ½ñ¹þ¤ß¥Ý¥¤¥ó¥¿ + n ¤Î°ÌÃ֤Υݥ¤¥ó¥¿
+ # @param n ½ñ¹þ¤ß¥Ý¥¤¥ó¥¿ + n ¤Î°ÌÃ֤Υݥ¤¥ó¥¿
+ # @param unlock_enable True¤Î¾ì¹ç¤Ë¥Ð¥Ã¥Õ¥¡¥¨¥ó¥×¥Æ¥£¤Î¥Ö¥í¥Ã¥¯¤ò²ò½ü¤¹¤ë
# @return BUFFER_OK: Àµ¾ï½ªÎ»
# BUFFER_ERROR: °Û¾ï½ªÎ»
#
@@ -186,7 +187,7 @@
# @return buffer length
#
# @endif
- def advanceWptr(self, n = 1):
+ def advanceWptr(self, n = 1, unlock_enable=True)):
pass
@@ -310,7 +311,8 @@
#
# ¸½ºß¤ÎÆɤ߽Ф·°ÌÃ֤Υݥ¤¥ó¥¿¤ò n ¸Ä¿Ê¤á¤ë¡£
#
- # @param n Æɤ߽Ф·¥Ý¥¤¥ó¥¿ + n ¤Î°ÌÃ֤Υݥ¤¥ó¥¿
+ # @param n Æɤ߽Ф·¥Ý¥¤¥ó¥¿ + n ¤Î°ÌÃ֤Υݥ¤¥ó¥¿
+ # @param unlock_enable True¤Î¾ì¹ç¤Ë¥Ð¥Ã¥Õ¥¡¥Õ¥ë¤Î¥Ö¥í¥Ã¥¯¤ò²ò½ü¤¹¤ë
# @return BUFFER_OK: Àµ¾ï½ªÎ»
# BUFFER_ERROR: °Û¾ï½ªÎ»
#
@@ -323,7 +325,7 @@
# @return buffer length
#
# @endif
- def advanceRptr(self, n = 1):
+ def advanceRptr(self, n = 1, unlock_enable=True):
pass
Modified: branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ManagerConfig.py
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ManagerConfig.py 2018-03-05 06:00:36 UTC (rev 956)
+++ branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ManagerConfig.py 2018-03-12 10:19:44 UTC (rev 957)
@@ -150,10 +150,12 @@
# ¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô¤Ë±þ¤¸¤Æ½é´ü²½¤ò¼Â¹Ô¤¹¤ë¡£¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤Ï
# °Ê²¼¤Î¤â¤Î¤¬»ÈÍѲÄǽ¤Ç¤¢¤ë¡£
#
+ # -a : ¥Þ¥Í¡¼¥¸¥ã¥µ¡¼¥Ó¥¹¤òOFF¤Ë¤¹¤ë¡£<br>
# -f file : ¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¥Õ¥¡¥¤¥ë¤ò»ØÄꤹ¤ë¡£<br>
# -l module : ¥í¡¼¥É¤¹¤ë¥â¥¸¥å¡¼¥ë¤ò»ØÄꤹ¤ë¡£(̤¼ÂÁõ)<br>
# -o options: ¤½¤Î¾¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¡£<br>
- # -d : ¥Ç¥Õ¥©¥ë¥È¤Î¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤ò»È¤¦¡£<br>
+ # -p : ¥Ý¡¼¥ÈÈÖ¹æ¤ò»ØÄꤹ¤ë¡£<br>
+ # -d : ¥Þ¥¹¥¿¡¼¥Þ¥Í¡¼¥¸¥ã¤òµ¯Æ°¤¹¤ë¡£<br>
#
# @param self
# @param argv ¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô
@@ -165,10 +167,12 @@
# Initialize with command line options. The following command options
# are available.
#
+ # -a : Disable Manager service<br>
# -f file : Specify a configuration file. <br>
# -l module : Specify modules to be loaded at the beginning. <br>
# -o options: Other options. <br>
- # -d : Use default static configuration. <br>
+ # -p : Specify a port number. <br>
+ # -d : Run Master Manager. <br>
#
# @endif
def init(self, argv):
@@ -240,10 +244,12 @@
#
# @brief ¥³¥Þ¥ó¥É°ú¿ô¤ò¥Ñ¡¼¥¹¤¹¤ë
#
+ # -a : ¥Þ¥Í¡¼¥¸¥ã¥µ¡¼¥Ó¥¹¤òOFF¤Ë¤¹¤ë¡£<br>
# -f file : ¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¥Õ¥¡¥¤¥ë¤ò»ØÄꤹ¤ë¡£<br>
# -l module : ¥í¡¼¥É¤¹¤ë¥â¥¸¥å¡¼¥ë¤ò»ØÄꤹ¤ë¡£(̤¼ÂÁõ)<br>
# -o options: ¤½¤Î¾¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¡£<br>
- # -d : ¥Ç¥Õ¥©¥ë¥È¤Î¥³¥ó¥Õ¥£¥®¥å¥ì¡¼¥·¥ç¥ó¤ò»È¤¦¡£<br>
+ # -p : ¥Ý¡¼¥ÈÈÖ¹æ¤ò»ØÄꤹ¤ë¡£<br>
+ # -d : ¥Þ¥¹¥¿¡¼¥Þ¥Í¡¼¥¸¥ã¤òµ¯Æ°¤¹¤ë¡£<br>
#
# @param self
# @param argv ¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¿ô
@@ -252,10 +258,12 @@
#
# @brief Parse command arguments
#
+ # -a : Disable Manager service<br>
# -f file : Specify a configuration file. <br>
# -l module : Specify modules to be loaded at the beginning. <br>
# -o options: Other options. <br>
- # -d : Use default static configuration. <br>
+ # -p : Specify a port number. <br>
+ # -d : Run Master Manager. <br>
#
# @endif
def parseArgs(self, argv):
@@ -278,7 +286,13 @@
if opt == "-o":
pos = arg.find(":")
if pos > 0:
- self._argprop.setProperty(arg[:pos],arg[pos+1:])
+ key = arg[:pos]
+ value = arg[pos+1:]
+ key = OpenRTM_aist.unescape(key)
+ key = key.strip()
+ value = OpenRTM_aist.unescape(value)
+ value = value.strip()
+ self._argprop.setProperty(key,value)
if opt == "-p":
num = [-1]
Modified: branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ManagerServant.py
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ManagerServant.py 2018-03-05 06:00:36 UTC (rev 956)
+++ branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ManagerServant.py 2018-03-12 10:19:44 UTC (rev 957)
@@ -284,6 +284,10 @@
del guard_master
if self._objref:
self._objref._release()
+
+ poa = self._mgr.getORB().resolve_initial_references("omniINSPOA")
+ poa.deactivate_object(poa.servant_to_id(self))
+
return
##
Modified: branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/PortAdmin.py
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/PortAdmin.py 2018-03-05 06:00:36 UTC (rev 956)
+++ branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/PortAdmin.py 2018-03-12 10:19:44 UTC (rev 957)
@@ -443,4 +443,5 @@
len_ = len(ports)
for i in range(len_):
idx = (len_ - 1) - i
+ ports[idx].exit()
self.removePort(ports[idx])
Modified: branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/PortBase.py
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/PortBase.py 2018-03-05 06:00:36 UTC (rev 956)
+++ branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/PortBase.py 2018-03-12 10:19:44 UTC (rev 957)
@@ -190,6 +190,25 @@
# @endif
#
def __del__(self):
+ pass
+
+
+ ##
+ # @if jp
+ #
+ # @brief ½ªÎ»´Ø¿ô
+ #
+ # @param self
+ #
+ # @else
+ #
+ # @brief
+ #
+ # @param self
+ #
+ # @endif
+ #
+ def exit(self):
self._rtcout.RTC_TRACE("PortBase.__del__()")
try:
poa = OpenRTM_aist.Manager.instance().getPOA()
@@ -197,7 +216,6 @@
poa.deactivate_object(oid)
except:
self._rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception())
-
##
# @if jp
Modified: branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/Properties.py
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/Properties.py 2018-03-05 06:00:36 UTC (rev 956)
+++ branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/Properties.py 2018-03-12 10:19:44 UTC (rev 957)
@@ -781,12 +781,10 @@
value = []
self.splitKeyValue(pline, key, value)
key[0] = OpenRTM_aist.unescape(key[0])
- OpenRTM_aist.eraseHeadBlank(key)
- OpenRTM_aist.eraseTailBlank(key)
+ key[0] = key[0].strip()
value[0] = OpenRTM_aist.unescape(value[0])
- OpenRTM_aist.eraseHeadBlank(value)
- OpenRTM_aist.eraseTailBlank(value)
+ value[0] = value[0].strip()
self.setProperty(key[0], value[0])
pline = ""
Modified: branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/RTObject.py
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/RTObject.py 2018-03-05 06:00:36 UTC (rev 956)
+++ branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/RTObject.py 2018-03-12 10:19:44 UTC (rev 957)
@@ -637,6 +637,13 @@
if self._exiting:
return RTC.RTC_OK
+ organizations = self.get_organizations()
+
+
+ for o in organizations:
+ o.remove_member(self.getInstanceName())
+
+
# deactivate myself on owned EC
OpenRTM_aist.CORBA_SeqUtil.for_each(self._ecMine,
self.deactivate_comps(self._objref))
@@ -4497,6 +4504,8 @@
self._poa.deactivate_object(self._poa.servant_to_id(self._SdoConfigImpl))
self._poa.deactivate_object(self._poa.servant_to_id(self))
self._sdoservice.exit()
+ poa = self._orb.resolve_initial_references("omniINSPOA")
+ poa.deactivate_object(poa.servant_to_id(self))
except:
self._rtcout.RTC_ERROR(OpenRTM_aist.Logger.print_exception())
Modified: branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/RingBuffer.py
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/RingBuffer.py 2018-03-05 06:00:36 UTC (rev 956)
+++ branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/RingBuffer.py 2018-03-12 10:19:44 UTC (rev 957)
@@ -237,7 +237,8 @@
# ½ñ¤¹þ¤ß²Äǽ¤ÊÍ×ÁÇ¿ô°Ê¾å¤Î¿ôÃͤò»ØÄꤷ¤¿¾ì¹ç¡¢PRECONDITION_NOT_MET
# ¤òÊÖ¤¹¡£
#
- # @param n ½ñ¹þ¤ß¥Ý¥¤¥ó¥¿ + n ¤Î°ÌÃ֤Υݥ¤¥ó¥¿
+ # @param n ½ñ¹þ¤ß¥Ý¥¤¥ó¥¿ + n ¤Î°ÌÃ֤Υݥ¤¥ó¥¿
+ # @param unlock_enable True¤Î¾ì¹ç¤Ë¥Ð¥Ã¥Õ¥¡¥¨¥ó¥×¥Æ¥£¤Î¥Ö¥í¥Ã¥¯¤ò²ò½ü¤¹¤ë
# @return BUFFER_OK: Àµ¾ï½ªÎ»
# PRECONDITION_NOT_MET: n > writable()
#
@@ -247,12 +248,19 @@
#
# Pure virtual function to get the buffer length.
#
+ # @param n
+ # @param unlock_enable
+ #
# @return buffer length
#
# @endif
#
# ReturnCode advanceWptr(long int n = 1)
- def advanceWptr(self, n = 1):
+ def advanceWptr(self, n = 1, unlock_enable=True):
+ empty = False
+ if unlock_enable and n > 0:
+ self._empty_cond.acquire()
+ empty = self.empty()
# n > 0 :
# n satisfies n <= writable elements
# n <= m_length - m_fillcout
@@ -267,6 +275,12 @@
self._wpos = (self._wpos + n + self._length) % self._length
self._fillcount += n
+
+ if unlock_enable and n > 0:
+ if empty:
+ self._empty_cond.notify()
+ self._empty_cond.release()
+
return OpenRTM_aist.BufferStatus.BUFFER_OK
@@ -349,6 +363,7 @@
def write(self, value, sec = -1, nsec = 0):
try:
self._full_cond.acquire()
+ self.full()
if self.full():
timedwrite = self._timedwrite # default is False
overwrite = self._overwrite # default is True
@@ -358,7 +373,7 @@
overwrite = False
if overwrite and not timedwrite: # "overwrite" mode
- self.advanceRptr()
+ self.advanceRptr(unlock_enable=False)
elif not overwrite and not timedwrite: # "do_nothing" mode
self._full_cond.release()
@@ -388,19 +403,11 @@
else: # unknown condition
self._full_cond.release()
return OpenRTM_aist.BufferStatus.PRECONDITION_NOT_MET
-
self._full_cond.release()
self.put(value)
- self._empty_cond.acquire()
- empty = self.empty()
- if empty:
- self.advanceWptr(1)
- self._empty_cond.notify()
- else:
- self.advanceWptr(1)
- self._empty_cond.release()
+ self.advanceWptr(1)
return OpenRTM_aist.BufferStatus.BUFFER_OK
except:
@@ -490,7 +497,8 @@
#
# ¸½ºß¤ÎÆɤ߽Ф·°ÌÃ֤Υݥ¤¥ó¥¿¤ò n ¸Ä¿Ê¤á¤ë¡£
#
- # @param n Æɤ߽Ф·¥Ý¥¤¥ó¥¿ + n ¤Î°ÌÃ֤Υݥ¤¥ó¥¿
+ # @param n Æɤ߽Ф·¥Ý¥¤¥ó¥¿ + n ¤Î°ÌÃ֤Υݥ¤¥ó¥¿
+ # @param unlock_enable True¤Î¾ì¹ç¤Ë¥Ð¥Ã¥Õ¥¡¥Õ¥ë¤Î¥Ö¥í¥Ã¥¯¤ò²ò½ü¤¹¤ë
# @return BUFFER_OK: Àµ¾ï½ªÎ»
# BUFFER_ERROR: °Û¾ï½ªÎ»
#
@@ -500,12 +508,19 @@
#
# Pure virtual function to get the buffer length.
#
+ # @param n
+ # @param unlock_enable
+ #
# @return buffer length
#
# @endif
#
# DataType* rptr(long int n = 0)
- def advanceRptr(self, n = 1):
+ def advanceRptr(self, n = 1, unlock_enable=True):
+ full_ = False
+ if unlock_enable and n > 0:
+ self._full_cond.acquire()
+ full_ = self.full()
# n > 0 :
# n satisfies n <= readable elements
# n <= m_fillcout
@@ -519,6 +534,14 @@
self._rpos = (self._rpos + n + self._length) % self._length
self._fillcount -= n
+
+
+
+ if unlock_enable and n > 0:
+ if full_:
+ self._full_cond.notify()
+ self._full_cond.release()
+
return OpenRTM_aist.BufferStatus.BUFFER_OK
@@ -655,18 +678,9 @@
else:
value.append(val)
- self._full_cond.acquire()
- full_ = self.full()
+ self.advanceRptr()
- if full_:
- self.advanceRptr()
- self._full_cond.notify()
- else:
- self.advanceRptr()
- self._full_cond.release()
-
-
return OpenRTM_aist.BufferStatus.BUFFER_OK
Modified: branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/examples/SeqIO/SeqIn.py
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/examples/SeqIO/SeqIn.py 2018-03-05 06:00:36 UTC (rev 956)
+++ branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/examples/SeqIO/SeqIn.py 2018-03-12 10:19:44 UTC (rev 957)
@@ -34,7 +34,11 @@
self._long = RTC.TimedLong(RTC.Time(0,0),0)
self._float = RTC.TimedFloat(RTC.Time(0,0),0)
self._double = RTC.TimedDouble(RTC.Time(0,0),0)
- self._octetSeq = RTC.TimedOctetSeq(RTC.Time(0,0),[])
+
+ self._octetSeq = RTC.TimedOctetSeq(RTC.Time(0,0),"")
+ if sys.version_info[0] == 3:
+ self._octetSeq.data = self._octetSeq.data.encode("utf-8")
+
self._shortSeq = RTC.TimedShortSeq(RTC.Time(0,0),[])
self._longSeq = RTC.TimedLongSeq(RTC.Time(0,0),[])
self._floatSeq = RTC.TimedFloatSeq(RTC.Time(0,0),[])
@@ -80,7 +84,13 @@
floatSeq_ = self._floatSeqIn.read()
doubleSeq_ = self._doubleSeqIn.read()
- octetSize_ = len(octetSeq_.data)
+
+ if sys.version_info[0] == 2:
+ octet_data = octetSeq_.data
+ else:
+ octet_data = octetSeq_.data.decode("utf-8")
+
+ octetSize_ = len(octet_data)
shortSize_ = len(shortSeq_.data)
longSize_ = len(longSeq_.data)
floatSize_ = len(floatSeq_.data)
@@ -88,10 +98,10 @@
octetSeqDisp_ = []
for i in range(octetSize_):
- octetSeqDisp_.append(ord(octetSeq_.data[i]))
+ octetSeqDisp_.append(ord(octet_data[i]))
maxsize = max(octetSize_, shortSize_, longSize_, floatSize_, doubleSize_)
- octetSeqDisp_ = octetSeqDisp_ + ['-'] * (maxsize - octetSize_)
+ octetSeqDisp_ = octetSeqDisp_ + [ord("-")] * (maxsize - octetSize_)
shortSeq_.data = shortSeq_.data + ['-'] * (maxsize - shortSize_)
longSeq_.data = longSeq_.data + ['-'] * (maxsize - longSize_)
floatSeq_.data = floatSeq_.data + ['-'] * (maxsize - floatSize_)
Modified: branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/examples/SeqIO/SeqOut.py
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/examples/SeqIO/SeqOut.py 2018-03-05 06:00:36 UTC (rev 956)
+++ branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/examples/SeqIO/SeqOut.py 2018-03-12 10:19:44 UTC (rev 957)
@@ -101,7 +101,11 @@
# Moving cursor (^[[nA : n lines upward)
print("[A\r[A\r[A\r[A\r[A\r[A\r[A\r[A\r[A\r[A\r[A\r[A\r[A\r[A\r[A\r[A\r")
- self._octetSeq.data = octetSeq
+
+ if sys.version_info[0] == 2:
+ self._octetSeq.data = octetSeq
+ else:
+ self._octetSeq.data = octetSeq.encode("utf-8")
self._shortSeq.data = shortSeq
self._longSeq.data = longSeq
self._floatSeq.data = floatSeq
Modified: branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py
===================================================================
--- branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py 2018-03-05 06:00:36 UTC (rev 956)
+++ branches/RELENG_1_2/OpenRTM-aist-Python/OpenRTM_aist/ext/sdo/observer/ComponentObserverConsumer.py 2018-03-12 10:19:44 UTC (rev 957)
@@ -66,13 +66,6 @@
# @endif
#
def __del__(self):
- self.unsetComponentProfileListeners()
- self.unsetComponentStatusListeners()
- self.unsetPortProfileListeners()
- self.unsetExecutionContextListeners()
- self.unsetConfigurationListeners()
- self.unsetHeartbeat()
- del self._timer
return
@@ -150,6 +143,8 @@
self.unsetExecutionContextListeners()
self.unsetConfigurationListeners()
self.unsetHeartbeat()
+
+ del self._timer
return
openrtm-commit メーリングリストの案内