OSDN Git Service

61173849f5d2c6fc62c3723ecec0c217984a7a2c
[portsreinstall/current.git] / lib / libdatabase_record.sh
1 #!/bin/sh -e
2 # ==============================================================================
3 # portsreinstall library script
4 # - Operations for recording operation results to the temporary database -
5 # Copyright (C) 2013-2021 Mamoru Sakaue, MwGhennndo, All Rights Reserved.
6 # This software is distributed under the 2-Clause BSD License.
7 # ==============================================================================
8
9 # ============= Update records by reflecting a successful result of (re/de)installation of a port =============
10 database_record_success ()
11 {
12         local origin nodedir dbdir_esc tag level dbsuffix
13         origin=$1
14         nodedir=${DBDIR}/requires/$origin
15         fileedit_add_a_line_if_new "$origin" "${DBDIR}/new_success_in_current_run"
16         dbdir_esc=`str_escape_replaceval "${DBDIR}/requires/"`
17         for tag in all run build none
18         do
19                 for level in full direct
20                 do
21                         dbsuffix=$tag.$level
22                         if [ -e "$nodedir/dependents.$dbsuffix" ]
23                         then
24                                 sed "s/^/$dbdir_esc/;s|$|/failed_requirements.$dbsuffix|" "$nodedir/dependents.$dbsuffix" | \
25                                         fileedit_rm_a_line_from_files "$origin"
26                         fi
27                         if [ $level = full -a -e "$nodedir/ignored_dependents.$tag" ]
28                         then
29                                 sed "s/^/$dbdir_esc/;s|$|/failed_requirements.$dbsuffix|" "$nodedir/ignored_dependents.$tag" | \
30                                         fileedit_rm_a_line_from_files "$origin"
31                         fi
32                         if [ ! -e "$nodedir/installed_by_pkg" ] && \
33                                 {
34                                         cat "$nodedir/requirements.$dbsuffix" 2> /dev/null
35                                         [ $level = full ] && cat "$nodedir/ignored_requirements.$tag" 2> /dev/null
36                                 } | env LANG=C grep -q -Fx -f "${DBDIR}/failed.list" 2> /dev/null
37                         then
38                                 fileedit_rm_a_line "$origin" "${DBDIR}/success.$dbsuffix.list"
39                                 fileedit_add_a_line_if_new "$origin" "${DBDIR}/todo_after_requirements_succeed.$dbsuffix.list"
40                         else
41                                 fileedit_add_a_line_if_new "$origin" "${DBDIR}/success.$dbsuffix.list"
42                                 fileedit_rm_a_line "$origin" "${DBDIR}/todo_after_requirements_succeed.$dbsuffix.list"
43                                 [ ! -e "$nodedir/necessary_upgrade.$dbsuffix" ] \
44                                         || mv "$nodedir/necessary_upgrade.$dbsuffix" "$nodedir/necessary_upgrade_completed.$dbsuffix"
45                         fi
46                 done
47         done
48         fileedit_rm_a_line "$origin" "${DBDIR}/failed.list"
49         fileedit_rm_a_line "$origin" "${DBDIR}/damaged_package"
50         touch "$nodedir/succeeded_once"
51         rm -f "${DBDIR}/notes/$origin/note_failtre" "$nodedir/conf_updated"
52 }
53
54 # ============= Update records by reflecting a failed result of (re/de)installation of a port =============
55 database_record_failure ()
56 {
57         local origin clean nodedir dbdir_esc tag level dbsuffix
58         origin=$1
59         clean=$2
60         nodedir=${DBDIR}/requires/$origin
61         fileedit_add_a_line_if_new "$origin" "${DBDIR}/failed.list"
62         dbdir_esc=`str_escape_replaceval "${DBDIR}/requires/"`
63         for tag in all run build none
64         do
65                 for level in full direct
66                 do
67                         dbsuffix=$tag.$level
68                         fileedit_rm_a_line "$origin" "${DBDIR}/success.$dbsuffix.list"
69                         fileedit_rm_a_line "$origin" "${DBDIR}/todo_after_requirements_succeed.$dbsuffix.list"
70                         if [ -e "$nodedir/dependents.$dbsuffix" ]
71                         then
72                                 sed "s/^/$dbdir_esc/;s|$|/failed_requirements.$dbsuffix|" "$nodedir/dependents.$dbsuffix" | \
73                                         fileedit_add_a_line_to_files_if_new "$origin"
74                         fi
75                         if [ $level = full -a -e "$nodedir/ignored_dependents.$tag" ]
76                         then
77                                 sed "s/^/$dbdir_esc/;s|$|/failed_requirements.$dbsuffix|" "$nodedir/ignored_dependents.$tag" | \
78                                         fileedit_add_a_line_to_files_if_new "$origin"
79                         fi
80                 done
81         done
82         rm -f "$nodedir/succeeded_once"
83         fileedit_rm_a_line "$origin" "${DBDIR}/inst_by_port_with_custom_conf.list"
84         fileedit_rm_a_line "$origin" "${DBDIR}/inst_by_port_with_default_conf.list"
85         fileedit_rm_a_line "$origin" "${DBDIR}/installation_complete_by_pkg.list"
86         if [ -z "$clean" -o "@$clean" = @clean ]
87         then
88                 message_echo "*** Trying to clean the failed build... (Ignore failures)"
89                 database_build_make "$origin" clean | message_cat
90         fi
91         message_echo "*** Skipping this port and proceeding to next forcibly..."
92         message_echo
93 }
94
95 # ============= Record a port that it was damaged by losing or destroying installed files =============
96 database_record_reconf_recover_sanity ()
97 {
98         local origin tag level dbsuffix
99         origin=$1
100         fileedit_add_a_line_if_new "$origin" "${DBDIR}/damaged_package"
101         for tag in all run build none
102         do
103                 for level in full direct
104                 do
105                         dbsuffix=$tag.$level
106                         fileedit_rm_a_line "$origin" "${DBDIR}/success.$dbsuffix.list"
107                         fileedit_rm_a_line "$origin" "${DBDIR}/todo_after_requirements_succeed.$dbsuffix.list"
108                 done
109         done
110         rm -f "${DBDIR}/requires/$origin/succeeded_once"
111 }