Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Explicitly tell the users which conflicts were found
Baptiste Daroussin committed 9 years ago
commit 2e27bf8bbcd2147c4bffd30d344ff0469e6e4add
parent 130e5c5
7 files changed +40 -0
modified libpkg/pkg.h.in
@@ -1303,6 +1303,7 @@ typedef enum {
	PKG_EVENT_FILE_MISSING,
	PKG_EVENT_CLEANUP_CALLBACK_REGISTER,
	PKG_EVENT_CLEANUP_CALLBACK_UNREGISTER,
+
	PKG_EVENT_CONFLICTS,
} pkg_event_t;

struct pkg_event {
@@ -1463,6 +1464,11 @@ struct pkg_event {
			void *data;
			void (*cleanup_cb)(void *data);
		} e_cleanup_callback;
+
		struct {
+
			struct pkg *p1;
+
			struct pkg *p2;
+
			const char *path;
+
		} e_conflicts;
	};
};

modified libpkg/pkg_event.c
@@ -1058,3 +1058,15 @@ pkg_unregister_cleanup_callback(void (*cleanup_cb)(void *data), void *data)
	ev.e_cleanup_callback.data = data;
	pkg_emit_event(&ev);
}
+

+
void
+
pkg_emit_conflicts(struct pkg *p1, struct pkg *p2, const char *path)
+
{
+
	struct pkg_event ev;
+

+
	ev.type = PKG_EVENT_CONFLICTS;
+
	ev.e_conflicts.p1 = p1;
+
	ev.e_conflicts.p2 = p2;
+
	ev.e_conflicts.path = path;
+
	pkg_emit_event(&ev);
+
}
modified libpkg/pkg_jobs_conflicts.c
@@ -327,6 +327,7 @@ pkg_conflicts_register_chain(struct pkg_jobs *j, struct pkg_job_universe_item *u
			else if (p1->type == PKG_INSTALLED || p2->type == PKG_INSTALLED) {
				/* local <-> remote conflict */
				if (pkg_conflicts_need_conflict(j, p1, p2)) {
+
					pkg_emit_conflicts(p1, p2, path);
					pkg_conflicts_register_unsafe(p1, p2, path,
						PKG_CONFLICT_REMOTE_LOCAL, true);
					j->conflicts_registered ++;
@@ -336,6 +337,7 @@ pkg_conflicts_register_chain(struct pkg_jobs *j, struct pkg_job_universe_item *u
			else {
				/* two remote packages */
				if (pkg_conflicts_need_conflict(j, p1, p2)) {
+
					pkg_emit_conflicts(p1, p2, path);
					pkg_conflicts_register_unsafe(p1, p2, path,
						PKG_CONFLICT_REMOTE_REMOTE, true);
					j->conflicts_registered ++;
modified libpkg/private/event.h
@@ -81,5 +81,6 @@ void pkg_emit_message(const char *msg);
void pkg_emit_file_missing(struct pkg *p, struct pkg_file *f);
void pkg_register_cleanup_callback(void (*cleanup_cb)(void *data), void *data);
void pkg_unregister_cleanup_callback(void (*cleanup_cb)(void *data), void *data);
+
void pkg_emit_conflicts(struct pkg *p1, struct pkg *p2, const char *path);

#endif
modified src/event.c
@@ -60,6 +60,7 @@
#define STALL_TIME 5

struct sbuf *messages = NULL;
+
struct sbuf *conflicts = NULL;

struct cleanup {
	void *data;
@@ -679,6 +680,12 @@ event_callback(void *data, struct pkg_event *ev)
		if (quiet)
			break;
		printf(" done (%d conflicting)\n", ev->e_integrity_finished.conflicting);
+
		if (conflicts != NULL) {
+
			sbuf_finish(conflicts);
+
			printf("%s", sbuf_data(conflicts));
+
			sbuf_delete(conflicts);
+
			conflicts = NULL;
+
		}
		break;
	case PKG_EVENT_INTEGRITYCHECK_CONFLICT:
		if (*debug == 0)
@@ -898,6 +905,16 @@ event_callback(void *data, struct pkg_event *ev)
			}
		}
		break;
+
	case PKG_EVENT_CONFLICTS:
+
		if (conflicts == NULL) {
+
			conflicts = sbuf_new_auto();
+
		}
+
		pkg_sbuf_printf(conflicts,
+
		    "  - %n-%v conflicts with %n-%v on %S\n",
+
		    ev->e_conflicts.p1, ev->e_conflicts.p1,
+
		    ev->e_conflicts.p2, ev->e_conflicts.p2,
+
		    ev->e_conflicts.path);
+
		break;
	default:
		break;
	}
modified tests/frontend/conflicts-multirepo.sh
@@ -158,6 +158,7 @@ Updating database digests format: done
Checking for upgrades (2 candidates):  done
Processing candidates (2 candidates):  done
Checking integrity... done (1 conflicting)
+
  - test-1.1 conflicts with test2-1 on ${TMPDIR}/b
Checking integrity... done (0 conflicting)
The following 2 package(s) will be affected (of 0 checked):

modified tests/frontend/conflicts.sh
@@ -74,6 +74,7 @@ Processing entries: done
local repository update completed. 1 packages processed.
Updating database digests format:  done
Checking integrity... done (1 conflicting)
+
  - test2-1 conflicts with test-1 on /tmp/kyua.atf-tester.ojBPJo/a
Checking integrity... done (0 conflicting)
The following 2 package(s) will be affected (of 0 checked):