Tested changes:
[SASANO Takayoshi uaa@mx5.nisiq.net] patch for bug#4687, discard echoback immediately to avoid OS's serial RX buffer overflow.
[Tom Hayward tom@tomh.us] Natively support null-terminated strings in Browser. #4685
When a bitwise char array that contains a null character is requested in the Browser, there is an error:
Traceback (most recent call last): File "/home/tom/src/chirp.hg/chirp/ui/radiobrowser.py", line 313, in _tree_click e = CharArrayEditor(item) File "/home/tom/src/chirp.hg/chirp/ui/radiobrowser.py", line 123, in __init__ self._build_ui() File "/home/tom/src/chirp.hg/chirp/ui/radiobrowser.py", line 206, in _build_ui ent.set_text(str(self._element)) TypeError: Gtk.Entry.set_text() argument 1 must be string without null bytes, not str
This error results in the char array contents not being displayed at all. All we get is the attribute name.
Radios commonly store strings shorter than the maximum length with null characters filling the remaining space. This is so common the browser should be able to display it.
This change strips the null characters off the char array so that Gtk doesn't freak out. This results in the string being displayed correctly.
The side effect is that the null characters are discarded on change. If the field is edited in the browser, Chirp fills the empty chars with spaces, not null characters like were there originally. Visually there is no difference, but the stored data are different.
[Tom Hayward tom@tomh.us] [id880] Fix typo in charset definition. #281
[Tom Hayward tom@tomh.us] [thf6a] Support full charset (ASCII). Fixes #141
[Tom Hayward tom@tomh.us] [id880] Support full charset. Fixes #281
[Tom Hayward tom@tomh.us] [vx5] Support full charset (ASCII). Fixes #292
[Tom Hayward tom@tomh.us] [id31a] set used bit when creating new memory, clear when deleting. Fixes #269
[Tom Hayward tom@tomh.us] Support PyGTK < 2.22 in bank edit. Fixes #231
[Tom Hayward tom@tomh.us] [d710] [v71] [d72] Fix tone list (not all tones are supported). Fixes #212
[Dan Smith dsmith@danplanet.com] [vx7] Fix setting memory power levels on 220MHz band Fixes #214
[Dan Smith dsmith@danplanet.com] fips: Pennsylvania FIPS code was wrong. #117
[Marco Filippi iz3gme.marco@gmail.com] Consider lower bound frequency of each valid_band as valid Fix bug #181
[Tom Hayward tom@tomh.us] tmd700: allow 8-char names. Fixes #176
[Dan Smith dsmith@danplanet.com] Fix the "blind deletion" problem, as well as properly direct copy/paste Fixes #172
[David Griffith dave@661.org] Bug #155 fix: VX-7 1.25m power levels
[David Griffith dave@661.org] New INSTALL and README files Fixes #122
[Tom Hayward tom@tomh.us] thd72: only use hardware flow on OS X. Fixes #166
[Marco Filippi iz3gme.marco@gmail.com] [FT817] Tone freq not set correctly Same as #88 for FT857, to avoid code duplication fix code have been moved from ft857 to its ancestor class Fix bug #163
[Tom Hayward tom@tomh.us] Fix Mac .app so paths with spaces work. Fixes Bug #145
Full log:
Started by an SCM change Building in workspace /var/lib/jenkins/jobs/chirp-test/workspace [workspace] $ hg showconfig paths.default [workspace] $ hg pull --rev default [workspace] $ hg update --clean --rev default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved [workspace] $ hg log --rev . --template {node} [workspace] $ hg log --rev . --template {rev} [workspace] $ hg log --rev a5e45271bdec203c2b29cbc1f72f2a8bea0202e4 [workspace] $ hg log --template "<changeset node='{node}' author='{author|xmlescape}' rev='{rev}' date='{date}'><msg>{desc|xmlescape}</msg><added>{file_adds|stringify|xmlescape}</added><deleted>{file_dels|stringify|xmlescape}</deleted><files>{files|stringify|xmlescape}</files><parents>{parents}</parents></changeset>\n" --rev default:0 --follow --prune a5e45271bdec203c2b29cbc1f72f2a8bea0202e4 No emails were triggered. [workspace] $ /bin/sh -xe /tmp/hudson5900180168840454243.sh [workspace] $ /bin/sh -xe /tmp/hudson7644118328466116308.sh + PATH=/usr/bin:/bin:/usr/local/bin ./run_all_tests.sh test_bit_array (tests.unit.test_bitwise.TestBitType) ... ok test_bit_array_fail (tests.unit.test_bitwise.TestBitType) ... ok test_bitfield_u16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok test_bitfield_u24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok test_bitfield_u8 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok test_bitfield_ul16 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok test_bitfield_ul24 (tests.unit.test_bitwise.TestBitfieldTypes) ... ok test_bbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok test_bbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok test_lbcd (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok test_lbcd_array (tests.unit.test_bitwise.TestBitwiseBCDTypes) ... ok test_int_array (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_u16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_u24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_u32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_u8 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_ul16 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_ul24 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_type_ul32 (tests.unit.test_bitwise.TestBitwiseBaseIntTypes) ... ok test_char (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok test_string (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok test_string_invalid_chars (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok test_string_wrong_length (tests.unit.test_bitwise.TestBitwiseCharTypes) ... ok test_comment_cppstyle (tests.unit.test_bitwise.TestBitwiseComments) ... ok test_comment_inline_cppstyle (tests.unit.test_bitwise.TestBitwiseComments) ... ok test_missing_semicolon (tests.unit.test_bitwise.TestBitwiseErrors) ... ok test_seek (tests.unit.test_bitwise.TestBitwiseSeek) ... ok test_seekto (tests.unit.test_bitwise.TestBitwiseSeek) ... ok test_struct_one_element (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok test_struct_two_elements (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok test_struct_writes (tests.unit.test_bitwise.TestBitwiseStructTypes) ... ok split_tone_encode_test_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_none (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok split_tone_encode_test_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_dtcs_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_dtcs_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_none_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_none_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_tone_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_cross_tone_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_dtcs (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_none (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_tone (tests.unit.test_chirp_common.TestSplitTone) ... ok test_split_tone_decode_tsql (tests.unit.test_chirp_common.TestSplitTone) ... ok test_fix_rounded_step_250 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_fix_rounded_step_500 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_fix_rounded_step_750 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_is_12_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_is_2_5 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_is_5_0 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_is_6_25 (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_is_fractional_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_required_step (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_required_step_fail (tests.unit.test_chirp_common.TestStepFunctions) ... ok test_format_freq (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok test_parse_freq_bad (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok test_parse_freq_decimal (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok test_parse_freq_whitespace (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok test_parse_freq_whole (tests.unit.test_chirp_common.TestUtilityFunctions) ... ok test_ensure_has_calls_almost_full (tests.unit.test_import_logic.DstarTests) ... ok test_ensure_has_calls_empty (tests.unit.test_import_logic.DstarTests) ... ok test_ensure_has_calls_partial (tests.unit.test_import_logic.DstarTests) ... ok test_ensure_has_calls_rptcall_full1 (tests.unit.test_import_logic.DstarTests) ... ok test_ensure_has_calls_rptcall_full2 (tests.unit.test_import_logic.DstarTests) ... ok test_ensure_has_calls_urcall_full (tests.unit.test_import_logic.DstarTests) ... ok test_import_bank (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_dtcs_diffA_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_dtcs_diffB_dtcs (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_duplex_negative (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_duplex_too_big_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_duplex_uhf (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_duplex_vhf (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mem (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mem_with_errors (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mem_with_warnings (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mode_invalid (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mode_valid_am (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_mode_valid_fm (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_name (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_power_closest (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_power_no_dst (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_power_no_src (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_power_same (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_tone_diffA_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok test_import_tone_diffB_tsql (tests.unit.test_import_logic.ImportFieldTests) ... ok test_mapping (tests.unit.test_mappingmodel.TestBaseBank) ... ok test_mapping_eq (tests.unit.test_mappingmodel.TestBaseBank) ... ok test_base_class (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok test_get_name (tests.unit.test_mappingmodel.TestBaseBankModel) ... ok test_mapping (tests.unit.test_mappingmodel.TestBaseMapping) ... ok test_mapping_eq (tests.unit.test_mappingmodel.TestBaseMapping) ... ok test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok test_get_name (tests.unit.test_mappingmodel.TestBaseMappingModel) ... ok test_base_class (tests.unit.test_mappingmodel.TestBaseMappingModelIndexInterface) ... ok test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_get_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomBankModel) ... ok test_icom_bank (tests.unit.test_mappingmodel.TestIcomBanks) ... ok test_mapping (tests.unit.test_mappingmodel.TestIcomBanks) ... ok test_mapping_eq (tests.unit.test_mappingmodel.TestIcomBanks) ... ok test_add_memory_to_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_index_bounds (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_mapping_memories (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_memory_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_next_mapping_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_get_num_mappings (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_remove_memory_from_mapping (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_remove_memory_from_mapping_no_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_remove_memory_from_mapping_wrong_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_set_memory_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_set_memory_index_bad_bank (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_set_memory_index_bad_index (tests.unit.test_mappingmodel.TestIcomIndexedBankModel) ... ok test_auto_tone_mode_cross (tests.unit.test_memedit_edits.TestEdits) ... ok test_auto_tone_mode_dtcs (tests.unit.test_memedit_edits.TestEdits) ... ok test_auto_tone_mode_dtcs_pol (tests.unit.test_memedit_edits.TestEdits) ... ok test_auto_tone_mode_dtcs_rx (tests.unit.test_memedit_edits.TestEdits) ... ok test_auto_tone_mode_tone (tests.unit.test_memedit_edits.TestEdits) ... ok test_auto_tone_mode_tsql (tests.unit.test_memedit_edits.TestEdits) ... ok test_init (tests.unit.test_platform.Win32PlatformTest) ... ok test_serial_ports_bad_portnames (tests.unit.test_platform.Win32PlatformTest) ... ok test_serial_ports_sorted (tests.unit.test_platform.Win32PlatformTest) ... ok test_apply_callback (tests.unit.test_settings.TestSettingContainers) ... ok test_radio_setting (tests.unit.test_settings.TestSettingContainers) ... ok test_radio_setting_group (tests.unit.test_settings.TestSettingContainers) ... ok test_radio_setting_multi (tests.unit.test_settings.TestSettingContainers) ... ok test_changed (tests.unit.test_settings.TestSettingValues) ... ok test_radio_setting_value_boolean (tests.unit.test_settings.TestSettingValues) ... ok test_radio_setting_value_float (tests.unit.test_settings.TestSettingValues) ... ok test_radio_setting_value_integer (tests.unit.test_settings.TestSettingValues) ... ok test_radio_setting_value_list (tests.unit.test_settings.TestSettingValues) ... ok test_radio_setting_value_string (tests.unit.test_settings.TestSettingValues) ... ok test_validate_callback (tests.unit.test_settings.TestSettingValues) ... ok test_delete_hole_with_all (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok test_delete_hole_with_all_full (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok test_delete_hole_with_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok test_delete_hole_without_hole (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok test_insert_hole_with_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok test_insert_hole_without_space (tests.unit.test_shiftdialog.ShiftDialogTest) ... ok
---------------------------------------------------------------------- Ran 151 tests in 0.055s
OK Patch 'tip' is OK Checking for PEP8 regressions... ./chirp/drivers/icf.py:202:26: E261 at least two spaces before inline comment ./chirp/drivers/icf.py:266:30: E261 at least two spaces before inline comment ./chirp/drivers/thd72.py:204:1: E302 expected 2 blank lines, found 1 ./chirp/platform.py:255:80: E501 line too long (82 > 79 characters) ./chirp/ui/mainapp.py:1909:80: E501 line too long (82 > 79 characters) ./chirp/ui/mainapp.py:1965:80: E501 line too long (82 > 79 characters)
real 0m7.760s user 0m7.572s sys 0m0.072s ================================================ Tests FAILED: driver tests Build step 'Execute shell' marked build as failure Email was triggered for: Failure Sending email for trigger: Failure