Commit 2426260
custom default values lost in DynamicPatch to TypedPatch conversion
Summary:
When converting a DynamicPatch to a TypedPatch, fields with custom default values (e.g., `bool enabled = true`) that were explicitly set to their intrinsic defaults (e.g., `false`) were incorrectly getting the custom default values instead.
Root cause: In `DiffVisitorBase::diffField()`, when a new struct field is added (exists in dst but not src), `emptyValue()` was used to create an empty Object `{}` for the ensure value. When this empty Object was later converted to a typed struct via `fromObjectStruct`, the typed struct was default-constructed with custom defaults, and the empty Object had no fields to override those defaults.
Fix: Store the actual destination field value in ensure instead of an empty Object. This ensures all field values are explicitly present when converting to typed patch, preventing custom defaults from incorrectly overriding intended values.
Reviewed By: Mizuchi
Differential Revision: D93497787
fbshipit-source-id: 246eb6efc35a900f5689ce8ce4f70ee6c0a0aab81 parent e3da8c4 commit 2426260
3 files changed
Lines changed: 86 additions & 5 deletions
File tree
- third-party/thrift/src/thrift/lib
- cpp2/patch/test
- thrift/detail
Lines changed: 64 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1787 | 1787 | | |
1788 | 1788 | | |
1789 | 1789 | | |
| 1790 | + | |
| 1791 | + | |
| 1792 | + | |
| 1793 | + | |
| 1794 | + | |
| 1795 | + | |
| 1796 | + | |
| 1797 | + | |
| 1798 | + | |
| 1799 | + | |
| 1800 | + | |
| 1801 | + | |
| 1802 | + | |
| 1803 | + | |
| 1804 | + | |
| 1805 | + | |
| 1806 | + | |
| 1807 | + | |
| 1808 | + | |
| 1809 | + | |
| 1810 | + | |
| 1811 | + | |
| 1812 | + | |
| 1813 | + | |
| 1814 | + | |
| 1815 | + | |
| 1816 | + | |
| 1817 | + | |
| 1818 | + | |
| 1819 | + | |
| 1820 | + | |
| 1821 | + | |
| 1822 | + | |
| 1823 | + | |
| 1824 | + | |
| 1825 | + | |
| 1826 | + | |
| 1827 | + | |
| 1828 | + | |
| 1829 | + | |
| 1830 | + | |
| 1831 | + | |
| 1832 | + | |
| 1833 | + | |
| 1834 | + | |
| 1835 | + | |
| 1836 | + | |
| 1837 | + | |
| 1838 | + | |
| 1839 | + | |
| 1840 | + | |
| 1841 | + | |
| 1842 | + | |
| 1843 | + | |
| 1844 | + | |
| 1845 | + | |
| 1846 | + | |
| 1847 | + | |
| 1848 | + | |
| 1849 | + | |
| 1850 | + | |
| 1851 | + | |
| 1852 | + | |
| 1853 | + | |
1790 | 1854 | | |
Lines changed: 14 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
Lines changed: 8 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1554 | 1554 | | |
1555 | 1555 | | |
1556 | 1556 | | |
1557 | | - | |
1558 | | - | |
1559 | | - | |
| 1557 | + | |
| 1558 | + | |
| 1559 | + | |
1560 | 1560 | | |
1561 | | - | |
1562 | 1561 | | |
1563 | | - | |
| 1562 | + | |
| 1563 | + | |
| 1564 | + | |
| 1565 | + | |
| 1566 | + | |
1564 | 1567 | | |
1565 | 1568 | | |
1566 | 1569 | | |
| |||
0 commit comments