[chirp_devel] [PATCH 2/9] Rename chirp.py as chirpc (#2343)
Kosta Arvanitis
Wed Feb 25 01:11:06 PST 2015
Is it possible to rename a file in HG and have it keep the history?
If your keen on creating a tool for install purposes, look at the setup script. You may be able to achieve this by creating a named setup distro without requiring a rename of the source file. I haven't tried this myself but should be possible.
-kosta
----------------------------------------
> Date: Wed, 25 Feb 2015 09:34:07 +0100
> From: iz3gme.marco at gmail.com
> To: chirp_devel at intrepid.danplanet.com
> Subject: Re: [chirp_devel] [PATCH 2/9] Rename chirp.py as chirpc (#2343)
>
> Sorry but ... this doesn't look as a rename to me, I think we can loose
> connection to old history of file
>
> 73 de IZ3GME Marco
>
> On 25/02/2015 08:26, Zach Welch wrote:
>> # HG changeset patch
>> # User Zach Welch <zach at mandolincreekfarm.com>
>>
>> Rename chirp.py as chirpc (#2343)
>>
>> The chirp CLI needs a better name if it ever will be installed in PATH.
>> It is better to do that early on rather than later.
>>
>> diff --git a/chirp.py b/chirp.py
>> deleted file mode 100755
>> index 9e5c59c..0000000
>> --- a/chirp.py
>> +++ /dev/null
>> @@ -1,297 +0,0 @@
>> -#!/usr/bin/env python
>> -#
>> -# Copyright 2008 Dan Smith <dsmith at danplanet.com>
>> -#
>> -# This program is free software: you can redistribute it and/or modify
>> -# it under the terms of the GNU General Public License as published by
>> -# the Free Software Foundation, either version 3 of the License, or
>> -# (at your option) any later version.
>> -#
>> -# This program is distributed in the hope that it will be useful,
>> -# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> -# GNU General Public License for more details.
>> -#
>> -# You should have received a copy of the GNU General Public License
>> -# along with this program. If not, see <http://www.gnu.org/licenses/>.
>> -
>> -
>> -import serial
>> -import sys
>> -from optparse import OptionParser
>> -import optparse
>> -
>> -from chirp import *
>> -from chirp import chirp_common, errors, idrp, directory, util
>> -
>> -def fail_unsupported():
>> - print "Operation not supported by selected radio"
>> - sys.exit(1)
>> -
>> -def fail_missing_mmap():
>> - print "mmap-only operation requires specification of an mmap file"
>> - sys.exit(1)
>> -
>> -RADIOS = directory.DRV_TO_RADIO
>> -
>> -def store_tone(option, opt, value, parser):
>> - if value in chirp_common.TONES:
>> - setattr(parser.values, option.dest, value)
>> - else:
>> - raise optparse.OptionValueError("Invalid tone value: %.1f" % value)
>> -
>> -def store_dtcs(option, opt, value, parser):
>> - try:
>> - value = int(value, 10)
>> - except ValueError:
>> - raise optparse.OptionValueError("Invalid DTCS value: %s" % value)
>> -
>> - if value in chirp_common.DTCS_CODES:
>> - setattr(parser.values, option.dest, value)
>> - else:
>> - raise optparse.OptionValueError("Invalid DTCS value: %03i" % value)
>> -
>> -def store_dtcspol(option, opt, value, parser):
>> - if value not in ["NN", "RN", "NR", "RR"]:
>> - raise optparse.OptionValueError("Invaid DTCS polarity: %s" % value)
>> -
>> - setattr(parser.values, option.dest, value)
>> -if __name__ == "__main__":
>> - parser = OptionParser()
>> - parser.add_option("-s", "--serial", dest="serial",
>> - default="mmap",
>> - help="Serial port (default: mmap)")
>> -
>> - parser.add_option("-i", "--id", dest="id",
>> - default=False,
>> - action="store_true",
>> - help="Request radio ID string")
>> - parser.add_option("", "--raw", dest="raw",
>> - default=False,
>> - action="store_true",
>> - help="Dump raw memory location")
>> -
>> - parser.add_option("", "--get-mem", dest="get_mem",
>> - default=False,
>> - action="store_true",
>> - help="Get and print memory location")
>> - parser.add_option("", "--set-mem-name", dest="set_mem_name",
>> - default=None,
>> - help="Set memory name")
>> - parser.add_option("", "--set-mem-freq", dest="set_mem_freq",
>> - type="float",
>> - default=None,
>> - help="Set memory frequency")
>> -
>> - parser.add_option("", "--set-mem-tencon", dest="set_mem_tencon",
>> - default=False,
>> - action="store_true",
>> - help="Set tone encode enabled flag")
>> - parser.add_option("", "--set-mem-tencoff", dest="set_mem_tencoff",
>> - default=False,
>> - action="store_true",
>> - help="Set tone decode disabled flag")
>> - parser.add_option("", "--set-mem-tsqlon", dest="set_mem_tsqlon",
>> - default=False,
>> - action="store_true",
>> - help="Set tone squelch enabled flag")
>> - parser.add_option("", "--set-mem-tsqloff", dest="set_mem_tsqloff",
>> - default=False,
>> - action="store_true",
>> - help="Set tone squelch disabled flag")
>> - parser.add_option("", "--set-mem-dtcson", dest="set_mem_dtcson",
>> - default=False,
>> - action="store_true",
>> - help="Set DTCS enabled flag")
>> - parser.add_option("", "--set-mem-dtcsoff", dest="set_mem_dtcsoff",
>> - default=False,
>> - action="store_true",
>> - help="Set DTCS disabled flag")
>> -
>> - parser.add_option("", "--set-mem-tenc", dest="set_mem_tenc",
>> - type="float",
>> - action="callback", callback=store_tone, nargs=1,
>> - help="Set memory encode tone")
>> - parser.add_option("", "--set-mem-tsql", dest="set_mem_tsql",
>> - type="float",
>> - action="callback", callback=store_tone, nargs=1,
>> - help="Set memory squelch tone")
>> - parser.add_option("", "--set-mem-dtcs", dest="set_mem_dtcs",
>> - type="string",
>> - action="callback", callback=store_dtcs, nargs=1,
>> - help="Set memory DTCS code")
>> -
>> - parser.add_option("", "--set-mem-dtcspol", dest="set_mem_dtcspol",
>> - type="string",
>> - action="callback", callback=store_dtcspol, nargs=1,
>> - help="Set memory DTCS polarity (NN, NR, RN, RR)")
>> -
>> - parser.add_option("", "--set-mem-dup", dest="set_mem_dup",
>> - help="Set memory duplex (+,-, or blank)")
>> - parser.add_option("", "--set-mem-offset", dest="set_mem_offset",
>> - type="float",
>> - help="Set memory duplex offset (in MHz)")
>> -
>> - parser.add_option("", "--set-mem-mode", dest="set_mem_mode",
>> - default=None,
>> - help="Set mode (%s)" % ",".join(chirp_common.MODES))
>> - parser.add_option("-r", "--radio", dest="radio",
>> - default=None,
>> - help="Radio model (one of %s)" % ",".join(RADIOS.keys()))
>> -
>> - parser.add_option("", "--mmap", dest="mmap",
>> - default=None,
>> - help="Radio memory map file location")
>> - parser.add_option("", "--download-mmap", dest="download_mmap",
>> - action="store_true",
>> - default=False,
>> - help="Download memory map from radio")
>> - parser.add_option("", "--upload-mmap", dest="upload_mmap",
>> - action="store_true",
>> - default=False,
>> - help="Upload memory map to radio")
>> - if len(sys.argv) <= 1:
>> - parser.print_help()
>> - sys.exit(0)
>> - (options, args) = parser.parse_args()
>> -
>> - if options.id:
>> - from chirp import icf
>> -
>> - s = serial.Serial(port=options.serial,
>> - baudrate=9600,
>> - timeout=0.5)
>> -
>> - md = icf.get_model_data(s)
>> -
>> - print "Model:\n%s" % util.hexprint(md)
>> -
>> - sys.exit(0)
>> -
>> - if not options.radio:
>> - if options.mmap:
>> - rclass = directory.get_radio_by_image(options.mmap).__class__
>> - else:
>> - print "Must specify a radio model"
>> - sys.exit(1)
>> - else:
>> - rclass = directory.get_radio(options.radio)
>> -
>> - if options.serial == "mmap":
>> - if options.mmap:
>> - s = options.mmap
>> - else:
>> - s = options.radio + ".img"
>> - else:
>> - print "opening %s at %i" % (options.serial, rclass.BAUD_RATE)
>> - s = serial.Serial(port=options.serial,
>> - baudrate=rclass.BAUD_RATE,
>> - timeout=0.5)
>> -
>> - radio = rclass(s)
>> -
>> - if options.raw:
>> - data = radio.get_raw_memory(int(args[0]))
>> - for i in data:
>> - if ord(i)> 0x7F:
>> - print "Memory location %i (%i):\n%s" % (int(args[0]),
>> - len(data),
>> - util.hexprint(data))
>> - sys.exit(0)
>> - print data
>> - sys.exit(0)
>> -
>> - if options.set_mem_dup is not None:
>> - if options.set_mem_dup != "+" and \
>> - options.set_mem_dup != "-" and \
>> - options.set_mem_dup != "":
>> - print "Invalid duplex value `%s'" % options.set_mem_dup
>> - print "Valid values are: '+', '-', ''"
>> - sys.exit(1)
>> - else:
>> - _dup = options.set_mem_dup
>> - else:
>> - _dup = None
>> -
>> - if options.set_mem_mode:
>> - print "Set mode: %s" % options.set_mem_mode
>> - if options.set_mem_mode not in chirp_common.MODES:
>> - print "Invalid mode `%s'"
>> - sys.exit(1)
>> - else:
>> - _mode = options.set_mem_mode
>> - else:
>> - _mode = None
>> -
>> - if options.set_mem_name or options.set_mem_freq or \
>> - options.set_mem_tencon or options.set_mem_tencoff or \
>> - options.set_mem_tsqlon or options.set_mem_tsqloff or \
>> - options.set_mem_dtcson or options.set_mem_dtcsoff or \
>> - options.set_mem_tenc or options.set_mem_tsql or options.set_mem_dtcs or\
>> - options.set_mem_dup is not None or \
>> - options.set_mem_mode or options.set_mem_dtcspol or\
>> - options.set_mem_offset:
>> - try:
>> - mem = radio.get_memory(int(args[0]))
>> - except errors.InvalidMemoryLocation:
>> - mem = chirp_common.Memory()
>> - mem.number = int(args[0])
>> -
>> - mem.name = options.set_mem_name or mem.name
>> - mem.freq = options.set_mem_freq or mem.freq
>> - mem.rtone = options.set_mem_tenc or mem.rtone
>> - mem.ctone = options.set_mem_tsql or mem.ctone
>> - mem.dtcs = options.set_mem_dtcs or mem.dtcs
>> - mem.dtcs_polarity = options.set_mem_dtcspol or mem.dtcs_polarity
>> - if _dup is not None:
>> - mem.duplex = _dup
>> - mem.offset = options.set_mem_offset or mem.offset
>> - mem.mode = _mode or mem.mode
>> -
>> - if options.set_mem_tencon:
>> - mem.tencEnabled = True
>> - elif options.set_mem_tencoff:
>> - mem.tencEnabled = False
>> -
>> - if options.set_mem_tsqlon:
>> - mem.tsqlEnabled = True
>> - elif options.set_mem_tsqloff:
>> - mem.tsqlEnabled = False
>> -
>> - if options.set_mem_dtcson:
>> - mem.dtcsEnabled = True
>> - elif options.set_mem_dtcsoff:
>> - mem.dtcsEnabled = False
>> -
>> - radio.set_memory(mem)
>> -
>> - if options.get_mem:
>> - try:
>> - pos = int(args[0])
>> - except ValueError:
>> - pos = args[0]
>> -
>> - try:
>> - mem = radio.get_memory(pos)
>> - except errors.InvalidMemoryLocation, e:
>> - mem = chirp_common.Memory()
>> - mem.number = pos
>> -
>> - print mem
>> -
>> - if options.download_mmap:
>> - #isinstance(radio, chirp_common.IcomMmapRadio) or fail_unsupported()
>> - radio.sync_in()
>> - radio.save_mmap(options.mmap)
>> -
>> - if options.upload_mmap:
>> - #isinstance(radio, chirp_common.IcomMmapRadio) or fail_unsupported()
>> - radio.load_mmap(options.mmap)
>> - if radio.sync_out():
>> - print "Clone successful"
>> - else:
>> - print "Clone failed"
>> -
>> - if options.mmap and isinstance(radio, chirp_common.CloneModeRadio):
>> - radio.save_mmap(options.mmap)
>> -
>> diff --git a/chirpc b/chirpc
>> new file mode 100755
>> index 0000000..9e5c59c
>> --- /dev/null
>> +++ b/chirpc
>> @@ -0,0 +1,297 @@
>> +#!/usr/bin/env python
>> +#
>> +# Copyright 2008 Dan Smith <dsmith at danplanet.com>
>> +#
>> +# This program is free software: you can redistribute it and/or modify
>> +# it under the terms of the GNU General Public License as published by
>> +# the Free Software Foundation, either version 3 of the License, or
>> +# (at your option) any later version.
>> +#
>> +# This program is distributed in the hope that it will be useful,
>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> +# GNU General Public License for more details.
>> +#
>> +# You should have received a copy of the GNU General Public License
>> +# along with this program. If not, see <http://www.gnu.org/licenses/>.
>> +
>> +
>> +import serial
>> +import sys
>> +from optparse import OptionParser
>> +import optparse
>> +
>> +from chirp import *
>> +from chirp import chirp_common, errors, idrp, directory, util
>> +
>> +def fail_unsupported():
>> + print "Operation not supported by selected radio"
>> + sys.exit(1)
>> +
>> +def fail_missing_mmap():
>> + print "mmap-only operation requires specification of an mmap file"
>> + sys.exit(1)
>> +
>> +RADIOS = directory.DRV_TO_RADIO
>> +
>> +def store_tone(option, opt, value, parser):
>> + if value in chirp_common.TONES:
>> + setattr(parser.values, option.dest, value)
>> + else:
>> + raise optparse.OptionValueError("Invalid tone value: %.1f" % value)
>> +
>> +def store_dtcs(option, opt, value, parser):
>> + try:
>> + value = int(value, 10)
>> + except ValueError:
>> + raise optparse.OptionValueError("Invalid DTCS value: %s" % value)
>> +
>> + if value in chirp_common.DTCS_CODES:
>> + setattr(parser.values, option.dest, value)
>> + else:
>> + raise optparse.OptionValueError("Invalid DTCS value: %03i" % value)
>> +
>> +def store_dtcspol(option, opt, value, parser):
>> + if value not in ["NN", "RN", "NR", "RR"]:
>> + raise optparse.OptionValueError("Invaid DTCS polarity: %s" % value)
>> +
>> + setattr(parser.values, option.dest, value)
>> +if __name__ == "__main__":
>> + parser = OptionParser()
>> + parser.add_option("-s", "--serial", dest="serial",
>> + default="mmap",
>> + help="Serial port (default: mmap)")
>> +
>> + parser.add_option("-i", "--id", dest="id",
>> + default=False,
>> + action="store_true",
>> + help="Request radio ID string")
>> + parser.add_option("", "--raw", dest="raw",
>> + default=False,
>> + action="store_true",
>> + help="Dump raw memory location")
>> +
>> + parser.add_option("", "--get-mem", dest="get_mem",
>> + default=False,
>> + action="store_true",
>> + help="Get and print memory location")
>> + parser.add_option("", "--set-mem-name", dest="set_mem_name",
>> + default=None,
>> + help="Set memory name")
>> + parser.add_option("", "--set-mem-freq", dest="set_mem_freq",
>> + type="float",
>> + default=None,
>> + help="Set memory frequency")
>> +
>> + parser.add_option("", "--set-mem-tencon", dest="set_mem_tencon",
>> + default=False,
>> + action="store_true",
>> + help="Set tone encode enabled flag")
>> + parser.add_option("", "--set-mem-tencoff", dest="set_mem_tencoff",
>> + default=False,
>> + action="store_true",
>> + help="Set tone decode disabled flag")
>> + parser.add_option("", "--set-mem-tsqlon", dest="set_mem_tsqlon",
>> + default=False,
>> + action="store_true",
>> + help="Set tone squelch enabled flag")
>> + parser.add_option("", "--set-mem-tsqloff", dest="set_mem_tsqloff",
>> + default=False,
>> + action="store_true",
>> + help="Set tone squelch disabled flag")
>> + parser.add_option("", "--set-mem-dtcson", dest="set_mem_dtcson",
>> + default=False,
>> + action="store_true",
>> + help="Set DTCS enabled flag")
>> + parser.add_option("", "--set-mem-dtcsoff", dest="set_mem_dtcsoff",
>> + default=False,
>> + action="store_true",
>> + help="Set DTCS disabled flag")
>> +
>> + parser.add_option("", "--set-mem-tenc", dest="set_mem_tenc",
>> + type="float",
>> + action="callback", callback=store_tone, nargs=1,
>> + help="Set memory encode tone")
>> + parser.add_option("", "--set-mem-tsql", dest="set_mem_tsql",
>> + type="float",
>> + action="callback", callback=store_tone, nargs=1,
>> + help="Set memory squelch tone")
>> + parser.add_option("", "--set-mem-dtcs", dest="set_mem_dtcs",
>> + type="string",
>> + action="callback", callback=store_dtcs, nargs=1,
>> + help="Set memory DTCS code")
>> +
>> + parser.add_option("", "--set-mem-dtcspol", dest="set_mem_dtcspol",
>> + type="string",
>> + action="callback", callback=store_dtcspol, nargs=1,
>> + help="Set memory DTCS polarity (NN, NR, RN, RR)")
>> +
>> + parser.add_option("", "--set-mem-dup", dest="set_mem_dup",
>> + help="Set memory duplex (+,-, or blank)")
>> + parser.add_option("", "--set-mem-offset", dest="set_mem_offset",
>> + type="float",
>> + help="Set memory duplex offset (in MHz)")
>> +
>> + parser.add_option("", "--set-mem-mode", dest="set_mem_mode",
>> + default=None,
>> + help="Set mode (%s)" % ",".join(chirp_common.MODES))
>> + parser.add_option("-r", "--radio", dest="radio",
>> + default=None,
>> + help="Radio model (one of %s)" % ",".join(RADIOS.keys()))
>> +
>> + parser.add_option("", "--mmap", dest="mmap",
>> + default=None,
>> + help="Radio memory map file location")
>> + parser.add_option("", "--download-mmap", dest="download_mmap",
>> + action="store_true",
>> + default=False,
>> + help="Download memory map from radio")
>> + parser.add_option("", "--upload-mmap", dest="upload_mmap",
>> + action="store_true",
>> + default=False,
>> + help="Upload memory map to radio")
>> + if len(sys.argv) <= 1:
>> + parser.print_help()
>> + sys.exit(0)
>> + (options, args) = parser.parse_args()
>> +
>> + if options.id:
>> + from chirp import icf
>> +
>> + s = serial.Serial(port=options.serial,
>> + baudrate=9600,
>> + timeout=0.5)
>> +
>> + md = icf.get_model_data(s)
>> +
>> + print "Model:\n%s" % util.hexprint(md)
>> +
>> + sys.exit(0)
>> +
>> + if not options.radio:
>> + if options.mmap:
>> + rclass = directory.get_radio_by_image(options.mmap).__class__
>> + else:
>> + print "Must specify a radio model"
>> + sys.exit(1)
>> + else:
>> + rclass = directory.get_radio(options.radio)
>> +
>> + if options.serial == "mmap":
>> + if options.mmap:
>> + s = options.mmap
>> + else:
>> + s = options.radio + ".img"
>> + else:
>> + print "opening %s at %i" % (options.serial, rclass.BAUD_RATE)
>> + s = serial.Serial(port=options.serial,
>> + baudrate=rclass.BAUD_RATE,
>> + timeout=0.5)
>> +
>> + radio = rclass(s)
>> +
>> + if options.raw:
>> + data = radio.get_raw_memory(int(args[0]))
>> + for i in data:
>> + if ord(i)> 0x7F:
>> + print "Memory location %i (%i):\n%s" % (int(args[0]),
>> + len(data),
>> + util.hexprint(data))
>> + sys.exit(0)
>> + print data
>> + sys.exit(0)
>> +
>> + if options.set_mem_dup is not None:
>> + if options.set_mem_dup != "+" and \
>> + options.set_mem_dup != "-" and \
>> + options.set_mem_dup != "":
>> + print "Invalid duplex value `%s'" % options.set_mem_dup
>> + print "Valid values are: '+', '-', ''"
>> + sys.exit(1)
>> + else:
>> + _dup = options.set_mem_dup
>> + else:
>> + _dup = None
>> +
>> + if options.set_mem_mode:
>> + print "Set mode: %s" % options.set_mem_mode
>> + if options.set_mem_mode not in chirp_common.MODES:
>> + print "Invalid mode `%s'"
>> + sys.exit(1)
>> + else:
>> + _mode = options.set_mem_mode
>> + else:
>> + _mode = None
>> +
>> + if options.set_mem_name or options.set_mem_freq or \
>> + options.set_mem_tencon or options.set_mem_tencoff or \
>> + options.set_mem_tsqlon or options.set_mem_tsqloff or \
>> + options.set_mem_dtcson or options.set_mem_dtcsoff or \
>> + options.set_mem_tenc or options.set_mem_tsql or options.set_mem_dtcs or\
>> + options.set_mem_dup is not None or \
>> + options.set_mem_mode or options.set_mem_dtcspol or\
>> + options.set_mem_offset:
>> + try:
>> + mem = radio.get_memory(int(args[0]))
>> + except errors.InvalidMemoryLocation:
>> + mem = chirp_common.Memory()
>> + mem.number = int(args[0])
>> +
>> + mem.name = options.set_mem_name or mem.name
>> + mem.freq = options.set_mem_freq or mem.freq
>> + mem.rtone = options.set_mem_tenc or mem.rtone
>> + mem.ctone = options.set_mem_tsql or mem.ctone
>> + mem.dtcs = options.set_mem_dtcs or mem.dtcs
>> + mem.dtcs_polarity = options.set_mem_dtcspol or mem.dtcs_polarity
>> + if _dup is not None:
>> + mem.duplex = _dup
>> + mem.offset = options.set_mem_offset or mem.offset
>> + mem.mode = _mode or mem.mode
>> +
>> + if options.set_mem_tencon:
>> + mem.tencEnabled = True
>> + elif options.set_mem_tencoff:
>> + mem.tencEnabled = False
>> +
>> + if options.set_mem_tsqlon:
>> + mem.tsqlEnabled = True
>> + elif options.set_mem_tsqloff:
>> + mem.tsqlEnabled = False
>> +
>> + if options.set_mem_dtcson:
>> + mem.dtcsEnabled = True
>> + elif options.set_mem_dtcsoff:
>> + mem.dtcsEnabled = False
>> +
>> + radio.set_memory(mem)
>> +
>> + if options.get_mem:
>> + try:
>> + pos = int(args[0])
>> + except ValueError:
>> + pos = args[0]
>> +
>> + try:
>> + mem = radio.get_memory(pos)
>> + except errors.InvalidMemoryLocation, e:
>> + mem = chirp_common.Memory()
>> + mem.number = pos
>> +
>> + print mem
>> +
>> + if options.download_mmap:
>> + #isinstance(radio, chirp_common.IcomMmapRadio) or fail_unsupported()
>> + radio.sync_in()
>> + radio.save_mmap(options.mmap)
>> +
>> + if options.upload_mmap:
>> + #isinstance(radio, chirp_common.IcomMmapRadio) or fail_unsupported()
>> + radio.load_mmap(options.mmap)
>> + if radio.sync_out():
>> + print "Clone successful"
>> + else:
>> + print "Clone failed"
>> +
>> + if options.mmap and isinstance(radio, chirp_common.CloneModeRadio):
>> + radio.save_mmap(options.mmap)
>> +
>>
>> _______________________________________________
>> chirp_devel mailing list
>> chirp_devel at intrepid.danplanet.com
>> http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
>> Developer docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers
>>
>
> _______________________________________________
> chirp_devel mailing list
> chirp_devel at intrepid.danplanet.com
> http://intrepid.danplanet.com/mailman/listinfo/chirp_devel
> Developer docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers
More information about the chirp_devel
mailing list