summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan McRae <allan@archlinux.org>2010-11-16 15:57:39 +1000
committerDan McGee <dan@archlinux.org>2010-12-12 20:29:37 -0600
commitadb10c3ab244cc00eb863d5b036fa7bdd76f8152 (patch)
tree8b1d8a3fb6753a491b7d1802c69ec190479659b5
parentf0051a7678d138ffc88a4c9c6d9add8966abe4f9 (diff)
downloadpacman-adb10c3ab244cc00eb863d5b036fa7bdd76f8152.tar.xz
Prototype disk space checking functionality
Very basic prototyping for adding functionality to check free disk space before performing package installs. Signed-off-by: Allan McRae <allan@archlinux.org> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--lib/libalpm/Makefile.am1
-rw-r--r--lib/libalpm/diskspace.c28
-rw-r--r--lib/libalpm/diskspace.h29
-rw-r--r--lib/libalpm/sync.c8
4 files changed, 66 insertions, 0 deletions
diff --git a/lib/libalpm/Makefile.am b/lib/libalpm/Makefile.am
index bac30389..da663cb5 100644
--- a/lib/libalpm/Makefile.am
+++ b/lib/libalpm/Makefile.am
@@ -32,6 +32,7 @@ libalpm_la_SOURCES = \
db.h db.c \
delta.h delta.c \
deps.h deps.c \
+ diskspace.h diskspace.c \
dload.h dload.c \
error.c \
graph.h \
diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c
new file mode 100644
index 00000000..31a2760d
--- /dev/null
+++ b/lib/libalpm/diskspace.c
@@ -0,0 +1,28 @@
+/*
+ * diskspace.c
+ *
+ * Copyright (c) 2010 Pacman Development Team <pacman-dev@archlinux.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* libalpm */
+#include "diskspace.h"
+
+int _alpm_check_diskspace(pmtrans_t *trans, pmdb_t *db)
+{
+ return 0;
+}
+
+/* vim: set ts=2 sw=2 noet: */
diff --git a/lib/libalpm/diskspace.h b/lib/libalpm/diskspace.h
new file mode 100644
index 00000000..69e39d8e
--- /dev/null
+++ b/lib/libalpm/diskspace.h
@@ -0,0 +1,29 @@
+/*
+ * diskspace.h
+ *
+ * Copyright (c) 2010 Pacman Development Team <pacman-dev@archlinux.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _ALPM_DISKSPACE_H
+#define _ALPM_DISKSPACE_H
+
+#include "alpm.h"
+
+int _alpm_check_diskspace(pmtrans_t *trans, pmdb_t *db);
+
+#endif /* _ALPM_DISKSPACE_H */
+
+/* vim: set ts=2 sw=2 noet: */
diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c
index 2f307750..23476b8d 100644
--- a/lib/libalpm/sync.c
+++ b/lib/libalpm/sync.c
@@ -48,6 +48,7 @@
#include "dload.h"
#include "delta.h"
#include "remove.h"
+#include "diskspace.h"
/** Check for new version of pkg in sync repos
* (only the first occurrence is considered in sync)
@@ -996,6 +997,13 @@ int _alpm_sync_commit(pmtrans_t *trans, pmdb_t *db_local, alpm_list_t **data)
EVENT(trans, PM_TRANS_EVT_FILECONFLICTS_DONE, NULL, NULL);
}
+ /* check available disk space */
+ _alpm_log(PM_LOG_DEBUG, "checking available disk space\n");
+ if(_alpm_check_diskspace(trans, handle->db_local) == -1) {
+ _alpm_log(PM_LOG_ERROR, _("not enough free disk space\n"));
+ goto error;
+ }
+
/* remove conflicting and to-be-replaced packages */
if(replaces) {
_alpm_log(PM_LOG_DEBUG, "removing conflicting and to-be-replaced packages\n");