[PATCH 1/2] When merging downloaded dives, strive to keep old dive in 'a'

Linus Torvalds torvalds at linux-foundation.org
Fri Dec 7 09:40:16 PST 2012


From: Linus Torvalds <torvalds at linux-foundation.org>
Date: Fri, 7 Dec 2012 09:22:35 -0800
Subject: [PATCH 1/2] When merging downloaded dives, strive to keep old dive in 'a'

This doesn't really change the logic of the merging, but it does mean
that the end result tends to be less unexpected: when downloading dives
that end up being merged with pre-existing dives (because you have
multiple dive computers, for example), the newly downloaded dive data
will tend to be appended to the old dive data, rather than showing up
first.

Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
---

This is not a big deal, but if you download dives from a dive computer 
that you already have in your dive list and they end up getting merged, it 
should make the end result a bit more repeatable, and depend less on the 
stability of the sort function or the exact time on the dive computers.

 dive.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/dive.c b/dive.c
index 9e44345cf365..5edb6087f887 100644
--- a/dive.c
+++ b/dive.c
@@ -1357,12 +1357,15 @@ struct dive *merge_dives(struct dive *a, struct dive *b, int offset, gboolean pr
 	struct dive *res = alloc_dive();
 	struct dive *dl = NULL;
 
-	if (prefer_downloaded) {
-		if (a->downloaded)
-			dl = a;
-		else if (b->downloaded)
-			dl = b;
+	/* Aim for newly downloaded dives to be 'b' (keep old dive data first) */
+	if (a->downloaded && !b->downloaded) {
+		struct dive *tmp = a;
+		a = b;
+		b = tmp;
 	}
+	if (prefer_downloaded && b->downloaded)
+		dl = b;
+
 	res->when = dl ? dl->when : a->when;
 	res->selected = a->selected || b->selected;
 	merge_trip(res, a, b);
-- 
1.8.0



More information about the subsurface mailing list