What's cooking (2024/05 #12)

Junio C Hamano committed May 28, 2024 at 13:42 UTC 5fb5c6a8c6bf29e003e7a09083d2803d05bcb933
1 file changed +184 -201
whats-cooking.txt
+184 -201
@@ -1,10 +1,10 @@
1 To: git@vger.kernel.org
2 -Subject: What's cooking in git.git (May 2024, #11; Mon, 27)
3 -X-master-at: b9cfe4845cb2562584837bc0101c0ab76490a239
2 +Subject: What's cooking in git.git (May 2024, #12; Tue, 28)
3 +X-master-at: 3a57aa566a21e7a510c64881bc6bdff7eb397988
4 X-next-at: bab1589fc04ad0202329dc933a2f485402c51dfa
5 Bcc: lwn@lwn.net, gitster@pobox.com
6
7 -What's cooking in git.git (May 2024, #11; Mon, 27)
7 +What's cooking in git.git (May 2024, #12; Tue, 28)
8 --------------------------------------------------
9
10 Here are the topics that have been cooking in my tree. Commits
@@ -55,7 +55,128 @@ Release tarballs are available at:
55 https://www.kernel.org/pub/software/scm/git/
56
57 --------------------------------------------------
58 -[New Topics]
58 +[Graduated to 'master']
59 +
60 +* ds/send-email-per-message-block (2024-04-10) 1 commit
61 + (merged to 'next' on 2024-05-20 at 189c49a1ca)
62 + + send-email: move newline characters out of a few translatable strings
63 +
64 + Preliminary code clean-up for "git send-email".
65 + The topmost commit in the original series was dropped per author's request.
66 + cf. <a07d3807a24f6d68cb48ee48366ae25e@manjaro.org>
67 + source: <29ea3a9b07bf1aa17b5d6a1e41325379c494bcb2.1712732383.git.dsimic@manjaro.org>
68 +
69 +
70 +* jc/doc-diff-name-only (2024-05-17) 1 commit
71 + (merged to 'next' on 2024-05-20 at 13b6f9350d)
72 + + diff: document what --name-only shows
73 +
74 + The documentation for "git diff --name-only" has been clarified
75 + that it is about showing the names in the post-image tree.
76 + source: <xmqqeda0jr7d.fsf@gitster.g>
77 +
78 +
79 +* jc/doc-manpages-l10n (2024-05-17) 1 commit
80 + (merged to 'next' on 2024-05-20 at fb103ed70f)
81 + + SubmittingPatches: advertise git-manpages-l10n project a bit
82 +
83 + The SubmittingPatches document now refers folks to manpages
84 + translation project.
85 + source: <xmqqv83muc12.fsf@gitster.g>
86 +
87 +
88 +* jc/format-patch-more-aggressive-range-diff (2024-05-06) 1 commit
89 + (merged to 'next' on 2024-05-21 at 899cce93fb)
90 + + format-patch: run range-diff with larger creation-factor
91 +
92 + The default "creation-factor" used by "git format-patch" has been
93 + raised to make it more aggressively find matching commits.
94 + source: <xmqqbk5i3ncw.fsf_-_@gitster.g>
95 +
96 +
97 +* jc/rev-parse-fatal-doc (2024-05-01) 1 commit
98 + (merged to 'next' on 2024-05-21 at 9bbb973b7b)
99 + + rev-parse: document how --is-* options work outside a repository
100 +
101 + Doc update.
102 + source: <xmqqplu54fbg.fsf@gitster.g>
103 +
104 +
105 +* jc/t0017-clarify-bogus-expectation (2024-05-16) 1 commit
106 + (merged to 'next' on 2024-05-20 at c64016ec43)
107 + + t0017: clarify dubious test set-up
108 +
109 + Test clean-up.
110 + source: <xmqqcypmx44l.fsf@gitster.g>
111 +
112 +
113 +* kn/osxkeychain-skip-idempotent-store (2024-05-15) 2 commits
114 + (merged to 'next' on 2024-05-21 at 4d757167ad)
115 + + osxkeychain: state to skip unnecessary store operations
116 + + osxkeychain: exclusive lock to serialize execution of operations
117 +
118 + The credential helper that talks with osx keychain learned to avoid
119 + storing back the authentication material it just got received from
120 + the keychain.
121 + source: <pull.1729.v3.git.1715800868.gitgitgadget@gmail.com>
122 +
123 +
124 +* kn/patch-iteration-doc (2024-05-17) 2 commits
125 + (merged to 'next' on 2024-05-20 at e0ee0051a9)
126 + + SubmittingPatches: add section for iterating patches
127 + + Merge branch 'jc/patch-flow-updates' into kn/patch-iteration-doc
128 +
129 + Doc updates.
130 + source: <20240517122724.270706-1-knayak@gitlab.com>
131 +
132 +
133 +* mt/t0211-typofix (2024-05-16) 1 commit
134 + (merged to 'next' on 2024-05-20 at f4fba3c7d2)
135 + + t/t0211-trace2-perf.sh: fix typo patern -> pattern
136 +
137 + Test fix.
138 + source: <ZkW5ggOVlglfi64u@telcontar>
139 +
140 +
141 +* ps/builtin-config-cleanup (2024-05-15) 22 commits
142 + (merged to 'next' on 2024-05-20 at b6f728f1f5)
143 + + builtin/config: pass data between callbacks via local variables
144 + + builtin/config: convert flags to a local variable
145 + + builtin/config: track "fixed value" option via flags only
146 + + builtin/config: convert `key` to a local variable
147 + + builtin/config: convert `key_regexp` to a local variable
148 + + builtin/config: convert `regexp` to a local variable
149 + + builtin/config: convert `value_pattern` to a local variable
150 + + builtin/config: convert `do_not_match` to a local variable
151 + + builtin/config: move `respect_includes_opt` into location options
152 + + builtin/config: move default value into display options
153 + + builtin/config: move type options into display options
154 + + builtin/config: move display options into local variables
155 + + builtin/config: move location options into local variables
156 + + builtin/config: refactor functions to have common exit paths
157 + + config: make the config source const
158 + + builtin/config: check for writeability after source is set up
159 + + builtin/config: move actions into `cmd_config_actions()`
160 + + builtin/config: move legacy options into `cmd_config()`
161 + + builtin/config: move subcommand options into `cmd_config()`
162 + + builtin/config: move legacy mode into its own function
163 + + builtin/config: stop printing full usage on misuse
164 + + Merge branch 'ps/config-subcommands' into ps/builtin-config-cleanup
165 +
166 + Code clean-up to reduce inter-function communication inside
167 + builtin/config.c done via the use of global variables.
168 + source: <cover.1715755055.git.ps@pks.im>
169 +
170 +
171 +* ps/complete-config-w-subcommands (2024-05-17) 1 commit
172 + (merged to 'next' on 2024-05-20 at 14453d34fc)
173 + + completion: adapt git-config(1) to complete subcommands
174 +
175 + The command line completion script (in contrib/) has been adjusted
176 + to the recent update to "git config" that adopted subcommand based
177 + UI.
178 + source: <8d43dee33289969a5afbbf7635ac40b7312d8e19.1715926344.git.ps@pks.im>
179 +
180
181 * ps/leakfixes-base (2024-05-27) 2 commits
182 (merged to 'next' on 2024-05-27 at bab1589fc0)
@@ -63,29 +184,75 @@ Release tarballs are available at:
184 + ci: add missing dependency for TTY prereq
185 (this branch is used by ps/leakfixes.)
186
187 + Will merge to 'master'.
188 source: <cover.1716810168.git.ps@pks.im>
189
190
191 +* ps/pseudo-ref-terminology (2024-05-15) 10 commits
192 + (merged to 'next' on 2024-05-20 at fc0f1f2607)
193 + + refs: refuse to write pseudorefs
194 + + ref-filter: properly distinuish pseudo and root refs
195 + + refs: pseudorefs are no refs
196 + + refs: classify HEAD as a root ref
197 + + refs: do not check ref existence in `is_root_ref()`
198 + + refs: rename `is_special_ref()` to `is_pseudo_ref()`
199 + + refs: rename `is_pseudoref()` to `is_root_ref()`
200 + + Documentation/glossary: define root refs as refs
201 + + Documentation/glossary: clarify limitations of pseudorefs
202 + + Documentation/glossary: redefine pseudorefs as special refs
203 + (this branch is used by ps/ref-storage-migration.)
204 +
205 + Terminology to call various ref-like things are getting
206 + straightened out.
207 + cf. <vgzwb5xnlvz2gfiqamzrfcjs2xya3zhhoootyzopfpdrjapayq@wfsomyal4cf6>
208 + source: <cover.1715755591.git.ps@pks.im>
209 +
210 +
211 +* tb/pack-bitmap-write-cleanups (2024-05-15) 6 commits
212 + (merged to 'next' on 2024-05-20 at 585e7bde21)
213 + + pack-bitmap: introduce `bitmap_writer_free()`
214 + + pack-bitmap-write.c: avoid uninitialized 'write_as' field
215 + + pack-bitmap: drop unused `max_bitmaps` parameter
216 + + pack-bitmap: avoid use of static `bitmap_writer`
217 + + pack-bitmap-write.c: move commit_positions into commit_pos fields
218 + + object.h: add flags allocated by pack-bitmap.h
219 + (this branch is used by tb/pseudo-merge-reachability-bitmap.)
220 +
221 + The pack bitmap code saw some clean-up to prepare for a follow-up topic.
222 + source: <cover.1715716605.git.me@ttaylorr.com>
223 +
224 +--------------------------------------------------
225 +[Cooking]
226 +
227 * gt/t-hash-unit-test (2024-05-27) 2 commits
228 - t/: migrate helper/test-{sha1, sha256} to unit-tests/t-hash
229 - strbuf: introduce strbuf_addstrings() to repeatedly add a string
230
231 + A pair of test helpers that essentially are unit tests on hash
232 + algorithms have been rewritten using the unit-tests framework.
233 +
234 + Will merge to 'next'?
235 source: <20240526084345.24138-1-shyamthakkar001@gmail.com>
236
237
238 * pp/add-parse-range-unit-test (2024-05-27) 1 commit
239 - apply: add unit tests for parse_range
240
241 + A unit test for code that parses the hunk offset and length from a
242 + patch fragment header as been added.
243 +
244 + Will merge to 'next'?
245 source: <pull.1677.v2.git.git.1716710073910.gitgitgadget@gmail.com>
246
247
248 * rs/difftool-env-simplify (2024-05-27) 1 commit
249 - difftool: add env vars directly in run_file_diff()
250
251 + Code simplification.
252 +
253 + Will merge to 'next'.
254 source: <c7c843b9-0ccf-4bcb-a036-d794729a99d6@web.de>
255
87 ---------------------------------------------------
88 -[Cooking]
256
257 * jc/format-patch-with-range-diff (2024-05-24) 2 commits
258 - format-patch: move range/inter diff at the end of a single patch output
@@ -96,7 +263,7 @@ Release tarballs are available at:
263 before the patch text, to be consistent with what is done for a
264 cover letter for a multi-patch series.
265
99 - Comments?
266 + Will merge to 'next'?
267 source: <20240523225007.2871766-1-gitster@pobox.com>
268
269
@@ -126,7 +293,7 @@ Release tarballs are available at:
293
294 Log the alias-expanded command lines to the trace output.
295
129 - Comments?
296 + Will merge to 'next' after squashing the fix in?
297 source: <20240525234454.1489598-1-iwienand@redhat.com>
298
299
@@ -161,7 +328,6 @@ Release tarballs are available at:
328 - checkout: clarify memory ownership in `unique_tracking_name()`
329 - strbuf: fix leak when `appendwholeline()` fails with EOF
330 - transport-helper: fix leaking helper name
164 - (this branch uses ps/leakfixes-base.)
331
332 Leakfixes.
333
@@ -169,10 +335,13 @@ Release tarballs are available at:
335 source: <cover.1716810168.git.ps@pks.im>
336
337
172 -* ps/ref-storage-migration (2024-05-24) 11 commits
338 +* ps/ref-storage-migration (2024-05-28) 14 commits
339 - builtin/refs: new command to migrate ref storage formats
340 - refs: implement logic to migrate between ref storage formats
341 - refs: implement removal of ref storages
342 + - worktree: don't store main worktree twice
343 + - reftable: inline `merged_table_release()`
344 + - refs/files: fix NULL pointer deref when releasing ref store
345 - refs/files: extract function to iterate through root refs
346 - refs/files: refactor `add_pseudoref_and_head_entries()`
347 - refs: allow to skip creation of reflog entries
@@ -181,15 +350,13 @@ Release tarballs are available at:
350 - setup: unset ref storage when reinitializing repository version
351 - Merge branch 'ps/pseudo-ref-terminology' into ps/ref-storage-migration
352 - Merge branch 'ps/refs-without-the-repository-updates' into ps/ref-storage-migration
184 - (this branch uses ps/pseudo-ref-terminology and ps/refs-without-the-repository-updates.)
353 + (this branch uses ps/refs-without-the-repository-updates.)
354
355 Allow migrating a repository that uses the files backend for its
356 ref storage to use the reftable backend, with limitations.
357
189 - Expecting a reroll.
190 - With this in 'seen', "leaks" job at CI seems to fail.
191 - cf. <xmqqwmniiqv2.fsf@gitster.g>
192 - source: <cover.1716545235.git.ps@pks.im>
358 + Will merge to 'next'.
359 + source: <cover.1716877224.git.ps@pks.im>
360
361
362 * tb/midx-write-cleanup (2024-05-24) 8 commits
@@ -234,12 +401,11 @@ Release tarballs are available at:
401 - Documentation/gitpacking.txt: describe pseudo-merge bitmaps
402 - Documentation/gitpacking.txt: initial commit
403 - Merge branch 'tb/pack-bitmap-write-cleanups' into tb/pseudo-merge-reachability-bitmap
237 - (this branch uses tb/pack-bitmap-write-cleanups.)
404
405 The pseudo-merge reachability bitmap to help more efficient storage
406 of the reachability bitmap in a repository with too many refs.
407
242 - Needs review.
408 + Will merge to 'next'?
409 source: <cover.1716499565.git.me@ttaylorr.com>
410
411
@@ -354,45 +520,6 @@ Release tarballs are available at:
520 source: <20240520190131.94904-1-ericsunshine@charter.net>
521
522
357 -* tb/pack-bitmap-write-cleanups (2024-05-15) 6 commits
358 - (merged to 'next' on 2024-05-20 at 585e7bde21)
359 - + pack-bitmap: introduce `bitmap_writer_free()`
360 - + pack-bitmap-write.c: avoid uninitialized 'write_as' field
361 - + pack-bitmap: drop unused `max_bitmaps` parameter
362 - + pack-bitmap: avoid use of static `bitmap_writer`
363 - + pack-bitmap-write.c: move commit_positions into commit_pos fields
364 - + object.h: add flags allocated by pack-bitmap.h
365 - (this branch is used by tb/pseudo-merge-reachability-bitmap.)
366 -
367 - The pack bitmap code saw some clean-up to prepare for a follow-up topic.
368 -
369 - Will merge to 'master'.
370 - source: <cover.1715716605.git.me@ttaylorr.com>
371 -
372 -
373 -* jc/t0017-clarify-bogus-expectation (2024-05-16) 1 commit
374 - (merged to 'next' on 2024-05-20 at c64016ec43)
375 - + t0017: clarify dubious test set-up
376 -
377 - Test clean-up.
378 -
379 - Will merge to 'master'.
380 - source: <xmqqcypmx44l.fsf@gitster.g>
381 -
382 -
383 -* kn/osxkeychain-skip-idempotent-store (2024-05-15) 2 commits
384 - (merged to 'next' on 2024-05-21 at 4d757167ad)
385 - + osxkeychain: state to skip unnecessary store operations
386 - + osxkeychain: exclusive lock to serialize execution of operations
387 -
388 - The credential helper that talks with osx keychain learned to avoid
389 - storing back the authentication material it just got received from
390 - the keychain.
391 -
392 - Will merge to 'master'.
393 - source: <pull.1729.v3.git.1715800868.gitgitgadget@gmail.com>
394 -
395 -
523 * kn/update-ref-symref (2024-05-27) 8 commits
524 - SQUASH??? leakfix
525 - update-ref: add support for 'symref-update' command
@@ -406,34 +533,10 @@ Release tarballs are available at:
533 "git update-ref --stdin" learned to handle transactional updates of
534 symbolic-refs.
535
409 - Needs review.
410 - With this in 'seen', "leaks" job at CI seems to fail.
411 - cf. <xmqqwmniiqv2.fsf@gitster.g>
536 + Expecting a (hopefully minor and final) reroll.
537 source: <20240514124411.1037019-1-knayak@gitlab.com>
538
539
415 -* mt/t0211-typofix (2024-05-16) 1 commit
416 - (merged to 'next' on 2024-05-20 at f4fba3c7d2)
417 - + t/t0211-trace2-perf.sh: fix typo patern -> pattern
418 -
419 - Test fix.
420 -
421 - Will merge to 'master'.
422 - source: <ZkW5ggOVlglfi64u@telcontar>
423 -
424 -
425 -* ps/complete-config-w-subcommands (2024-05-17) 1 commit
426 - (merged to 'next' on 2024-05-20 at 14453d34fc)
427 - + completion: adapt git-config(1) to complete subcommands
428 -
429 - Update the command line completion script (in contrib/) to adjust
430 - to the recent update to "git config" that adopted subcommand based
431 - UI.
432 -
433 - Will merge to 'master'.
434 - source: <8d43dee33289969a5afbbf7635ac40b7312d8e19.1715926344.git.ps@pks.im>
435 -
436 -
540 * ps/refs-without-the-repository-updates (2024-05-17) 17 commits
541 (merged to 'next' on 2024-05-22 at 744f37ab2b)
542 + refs/packed: remove references to `the_hash_algo`
@@ -463,28 +566,6 @@ Release tarballs are available at:
566 source: <cover.1715929858.git.ps@pks.im>
567
568
466 -* jc/doc-diff-name-only (2024-05-17) 1 commit
467 - (merged to 'next' on 2024-05-20 at 13b6f9350d)
468 - + diff: document what --name-only shows
469 -
470 - The documentation for "git diff --name-only" has been clarified
471 - that it is about showing the names in the post-image tree.
472 -
473 - Will merge to 'master'.
474 - source: <xmqqeda0jr7d.fsf@gitster.g>
475 -
476 -
477 -* kn/patch-iteration-doc (2024-05-17) 2 commits
478 - (merged to 'next' on 2024-05-20 at e0ee0051a9)
479 - + SubmittingPatches: add section for iterating patches
480 - + Merge branch 'jc/patch-flow-updates' into kn/patch-iteration-doc
481 -
482 - Doc updates.
483 -
484 - Will merge to 'master'.
485 - source: <20240517122724.270706-1-knayak@gitlab.com>
486 -
487 -
569 * mt/openindiana-scalar (2024-05-17) 1 commit
570 - scalar: make enlistment delete to work on all POSIX platforms
571
@@ -536,49 +617,6 @@ Release tarballs are available at:
617 source: <20240520231434.1816979-1-gitster@pobox.com>
618
619
539 -* ps/builtin-config-cleanup (2024-05-15) 22 commits
540 - (merged to 'next' on 2024-05-20 at b6f728f1f5)
541 - + builtin/config: pass data between callbacks via local variables
542 - + builtin/config: convert flags to a local variable
543 - + builtin/config: track "fixed value" option via flags only
544 - + builtin/config: convert `key` to a local variable
545 - + builtin/config: convert `key_regexp` to a local variable
546 - + builtin/config: convert `regexp` to a local variable
547 - + builtin/config: convert `value_pattern` to a local variable
548 - + builtin/config: convert `do_not_match` to a local variable
549 - + builtin/config: move `respect_includes_opt` into location options
550 - + builtin/config: move default value into display options
551 - + builtin/config: move type options into display options
552 - + builtin/config: move display options into local variables
553 - + builtin/config: move location options into local variables
554 - + builtin/config: refactor functions to have common exit paths
555 - + config: make the config source const
556 - + builtin/config: check for writeability after source is set up
557 - + builtin/config: move actions into `cmd_config_actions()`
558 - + builtin/config: move legacy options into `cmd_config()`
559 - + builtin/config: move subcommand options into `cmd_config()`
560 - + builtin/config: move legacy mode into its own function
561 - + builtin/config: stop printing full usage on misuse
562 - + Merge branch 'ps/config-subcommands' into ps/builtin-config-cleanup
563 -
564 - Code clean-up to reduce inter-function communication inside
565 - builtin/config.c done via the use of global variables.
566 -
567 - Will merge to 'master'.
568 - source: <cover.1715755055.git.ps@pks.im>
569 -
570 -
571 -* jc/doc-manpages-l10n (2024-05-17) 1 commit
572 - (merged to 'next' on 2024-05-20 at fb103ed70f)
573 - + SubmittingPatches: advertise git-manpages-l10n project a bit
574 -
575 - The SubmittingPatches document now refers folks to manpages
576 - translation project.
577 -
578 - Will merge to 'master'.
579 - source: <xmqqv83muc12.fsf@gitster.g>
580 -
581 -
620 * ps/reftable-reusable-iterator (2024-05-13) 13 commits
621 (merged to 'next' on 2024-05-22 at b92eb9939f)
622 + reftable/merged: adapt interface to allow reuse of iterators
@@ -614,17 +652,6 @@ Release tarballs are available at:
652 source: <20240521141452.26210-1-tboegi@web.de>
653
654
617 -* jc/format-patch-more-aggressive-range-diff (2024-05-06) 1 commit
618 - (merged to 'next' on 2024-05-21 at 899cce93fb)
619 - + format-patch: run range-diff with larger creation-factor
620 -
621 - The default "creation-factor" used by "git format-patch" has been
622 - raised to make it more aggressively find matching commits.
623 -
624 - Will merge to 'master'.
625 - source: <xmqqbk5i3ncw.fsf_-_@gitster.g>
626 -
627 -
655 * ps/reftable-write-options (2024-05-13) 11 commits
656 (merged to 'next' on 2024-05-22 at ae8e378430)
657 + refs/reftable: allow configuring geometric factor
@@ -646,38 +673,6 @@ Release tarballs are available at:
673 source: <cover.1715587849.git.ps@pks.im>
674
675
649 -* ps/pseudo-ref-terminology (2024-05-15) 10 commits
650 - (merged to 'next' on 2024-05-20 at fc0f1f2607)
651 - + refs: refuse to write pseudorefs
652 - + ref-filter: properly distinuish pseudo and root refs
653 - + refs: pseudorefs are no refs
654 - + refs: classify HEAD as a root ref
655 - + refs: do not check ref existence in `is_root_ref()`
656 - + refs: rename `is_special_ref()` to `is_pseudo_ref()`
657 - + refs: rename `is_pseudoref()` to `is_root_ref()`
658 - + Documentation/glossary: define root refs as refs
659 - + Documentation/glossary: clarify limitations of pseudorefs
660 - + Documentation/glossary: redefine pseudorefs as special refs
661 - (this branch is used by ps/ref-storage-migration.)
662 -
663 - Terminology to call various ref-like things are getting
664 - straightened out.
665 -
666 - Will merge to 'master'.
667 - cf. <vgzwb5xnlvz2gfiqamzrfcjs2xya3zhhoootyzopfpdrjapayq@wfsomyal4cf6>
668 - source: <cover.1715755591.git.ps@pks.im>
669 -
670 -
671 -* jc/rev-parse-fatal-doc (2024-05-01) 1 commit
672 - (merged to 'next' on 2024-05-21 at 9bbb973b7b)
673 - + rev-parse: document how --is-* options work outside a repository
674 -
675 - Doc update.
676 -
677 - Will merge to 'master'.
678 - source: <xmqqplu54fbg.fsf@gitster.g>
679 -
680 -
676 * ps/undecided-is-not-necessarily-sha1 (2024-05-06) 15 commits
677 (merged to 'next' on 2024-05-08 at 9f8e894685)
678 + repository: stop setting SHA1 as the default object hash
@@ -719,18 +714,6 @@ Release tarballs are available at:
714 source: <pull.1672.v2.git.1712585787.gitgitgadget@gmail.com>
715
716
722 -* ds/send-email-per-message-block (2024-04-10) 1 commit
723 - (merged to 'next' on 2024-05-20 at 189c49a1ca)
724 - + send-email: move newline characters out of a few translatable strings
725 -
726 - Preliminary code clean-up for "git send-email".
727 -
728 - Will merge to 'master'.
729 - The topmost commit in the original series was dropped per author's request.
730 - cf. <a07d3807a24f6d68cb48ee48366ae25e@manjaro.org>
731 - source: <29ea3a9b07bf1aa17b5d6a1e41325379c494bcb2.1712732383.git.dsimic@manjaro.org>
732 -
733 -
717 * ew/khash-to-khashl (2024-03-28) 3 commits
718 - khashl: fix ensemble lookups on empty table
719 - treewide: switch to khashl for memory savings