author | drw <drw> | 2003-02-25 00:39:29 (UTC) |
---|---|---|
committer | drw <drw> | 2003-02-25 00:39:29 (UTC) |
commit | 8d80ed4f9cf8051b5566aaf3f639c76fe7d6de7c (patch) (unidiff) | |
tree | 95ac0e3df097d1d2af81dbb543502b0682043fc0 | |
parent | 45fc2c7089de9bbb7887ba9bdb56c974b19c1caf (diff) | |
download | opie-8d80ed4f9cf8051b5566aaf3f639c76fe7d6de7c.zip opie-8d80ed4f9cf8051b5566aaf3f639c76fe7d6de7c.tar.gz opie-8d80ed4f9cf8051b5566aaf3f639c76fe7d6de7c.tar.bz2 |
Fix for bug #707 - remove package from status file only if package removal was successful.
-rw-r--r-- | noncore/settings/aqpkg/ipkg.cpp | 13 | ||||
-rw-r--r-- | noncore/settings/aqpkg/ipkg.h | 1 |
2 files changed, 8 insertions, 6 deletions
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp index 51eca8b..e66c02d 100644 --- a/noncore/settings/aqpkg/ipkg.cpp +++ b/noncore/settings/aqpkg/ipkg.cpp | |||
@@ -48,24 +48,25 @@ Ipkg :: ~Ipkg() | |||
48 | 48 | ||
49 | // Option is what we are going to do - install, upgrade, download, reinstall | 49 | // Option is what we are going to do - install, upgrade, download, reinstall |
50 | // package is the package name to install - either a fully qualified path and ipk | 50 | // package is the package name to install - either a fully qualified path and ipk |
51 | // file (if stored locally) or just the name of the package (for a network package) | 51 | // file (if stored locally) or just the name of the package (for a network package) |
52 | // packageName is the package name - (for a network package this will be the same as | 52 | // packageName is the package name - (for a network package this will be the same as |
53 | // package parameter) | 53 | // package parameter) |
54 | // dest is the destination alias (from ipk.conf) | 54 | // dest is the destination alias (from ipk.conf) |
55 | // destDir is the dir that the destination alias points to (used to link to root) | 55 | // destDir is the dir that the destination alias points to (used to link to root) |
56 | // flags is the ipkg options flags | 56 | // flags is the ipkg options flags |
57 | // dir is the directory to run ipkg in (defaults to "") | 57 | // dir is the directory to run ipkg in (defaults to "") |
58 | bool Ipkg :: runIpkg( ) | 58 | bool Ipkg :: runIpkg( ) |
59 | { | 59 | { |
60 | error = false; | ||
60 | bool ret = false; | 61 | bool ret = false; |
61 | QStringList commands; | 62 | QStringList commands; |
62 | 63 | ||
63 | QDir::setCurrent( "/tmp" ); | 64 | QDir::setCurrent( "/tmp" ); |
64 | 65 | ||
65 | if ( runtimeDir != "" ) | 66 | if ( runtimeDir != "" ) |
66 | { | 67 | { |
67 | commands << "cd "; | 68 | commands << "cd "; |
68 | commands << runtimeDir; | 69 | commands << runtimeDir; |
69 | commands << ";"; | 70 | commands << ";"; |
70 | } | 71 | } |
71 | commands << "ipkg" << "-force-defaults"; | 72 | commands << "ipkg" << "-force-defaults"; |
@@ -159,30 +160,24 @@ bool Ipkg :: runIpkg( ) | |||
159 | { | 160 | { |
160 | if ( *pkg == package ) | 161 | if ( *pkg == package ) |
161 | continue; | 162 | continue; |
162 | emit outputText( " " ); | 163 | emit outputText( " " ); |
163 | emit outputText( QString( "Creating symbolic links for " )+ (*pkg) ); | 164 | emit outputText( QString( "Creating symbolic links for " )+ (*pkg) ); |
164 | linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); | 165 | linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); |
165 | } | 166 | } |
166 | } | 167 | } |
167 | } | 168 | } |
168 | 169 | ||
169 | delete dependantPackages; | 170 | delete dependantPackages; |
170 | 171 | ||
171 | // Finally, if we are removing a package, remove its entry from the <destdir>/usr/lib/ipkg/status file | ||
172 | // to workaround an ipkg bug which stops reinstall to a different location | ||
173 | if ( option == "remove" ) | ||
174 | removeStatusEntry(); | ||
175 | |||
176 | |||
177 | emit outputText( "Finished" ); | 172 | emit outputText( "Finished" ); |
178 | emit outputText( "" ); | 173 | emit outputText( "" ); |
179 | return ret; | 174 | return ret; |
180 | 175 | ||
181 | } | 176 | } |
182 | 177 | ||
183 | void Ipkg :: removeStatusEntry() | 178 | void Ipkg :: removeStatusEntry() |
184 | { | 179 | { |
185 | QString statusFile = destDir; | 180 | QString statusFile = destDir; |
186 | if ( statusFile.right( 1 ) != "/" ) | 181 | if ( statusFile.right( 1 ) != "/" ) |
187 | statusFile += "/"; | 182 | statusFile += "/"; |
188 | statusFile += "usr/lib/ipkg/status"; | 183 | statusFile += "usr/lib/ipkg/status"; |
@@ -331,28 +326,34 @@ void Ipkg::commandStdout(OProcess*, char *buffer, int buflen) | |||
331 | } | 326 | } |
332 | 327 | ||
333 | void Ipkg::commandStderr(OProcess*, char *buffer, int buflen) | 328 | void Ipkg::commandStderr(OProcess*, char *buffer, int buflen) |
334 | { | 329 | { |
335 | qDebug("received stderrt %d bytes", buflen); | 330 | qDebug("received stderrt %d bytes", buflen); |
336 | 331 | ||
337 | QString lineStr = buffer; | 332 | QString lineStr = buffer; |
338 | if ( lineStr[buflen-1] == '\n' ) | 333 | if ( lineStr[buflen-1] == '\n' ) |
339 | buflen --; | 334 | buflen --; |
340 | lineStr=lineStr.left( buflen ); | 335 | lineStr=lineStr.left( buflen ); |
341 | emit outputText( lineStr ); | 336 | emit outputText( lineStr ); |
342 | buffer[0] = '\0'; | 337 | buffer[0] = '\0'; |
338 | error = true; | ||
343 | } | 339 | } |
344 | 340 | ||
345 | void Ipkg::processFinished() | 341 | void Ipkg::processFinished() |
346 | { | 342 | { |
343 | // Finally, if we are removing a package, remove its entry from the <destdir>/usr/lib/ipkg/status file | ||
344 | // to workaround an ipkg bug which stops reinstall to a different location | ||
345 | if ( !error && option == "remove" ) | ||
346 | removeStatusEntry(); | ||
347 | |||
347 | delete proc; | 348 | delete proc; |
348 | proc = 0; | 349 | proc = 0; |
349 | finished = true; | 350 | finished = true; |
350 | } | 351 | } |
351 | 352 | ||
352 | 353 | ||
353 | void Ipkg :: abort() | 354 | void Ipkg :: abort() |
354 | { | 355 | { |
355 | if ( proc ) | 356 | if ( proc ) |
356 | { | 357 | { |
357 | proc->kill(); | 358 | proc->kill(); |
358 | aborted = true; | 359 | aborted = true; |
diff --git a/noncore/settings/aqpkg/ipkg.h b/noncore/settings/aqpkg/ipkg.h index f08667b..d49bb04 100644 --- a/noncore/settings/aqpkg/ipkg.h +++ b/noncore/settings/aqpkg/ipkg.h | |||
@@ -56,24 +56,25 @@ signals: | |||
56 | void outputText( const QString &text ); | 56 | void outputText( const QString &text ); |
57 | 57 | ||
58 | public slots: | 58 | public slots: |
59 | void commandStdout(OProcess*, char *buffer, int buflen); | 59 | void commandStdout(OProcess*, char *buffer, int buflen); |
60 | void commandStderr(OProcess*, char *buffer, int buflen); | 60 | void commandStderr(OProcess*, char *buffer, int buflen); |
61 | void processFinished(); | 61 | void processFinished(); |
62 | void abort(); | 62 | void abort(); |
63 | 63 | ||
64 | 64 | ||
65 | private: | 65 | private: |
66 | bool createLinks; | 66 | bool createLinks; |
67 | bool aborted; | 67 | bool aborted; |
68 | bool error; | ||
68 | QString option; | 69 | QString option; |
69 | QString package; | 70 | QString package; |
70 | QString destination; | 71 | QString destination; |
71 | QString destDir; | 72 | QString destDir; |
72 | QString runtimeDir; | 73 | QString runtimeDir; |
73 | OProcess *proc; | 74 | OProcess *proc; |
74 | int flags; | 75 | int flags; |
75 | bool finished; | 76 | bool finished; |
76 | 77 | ||
77 | QList<QString> *dependantPackages; | 78 | QList<QString> *dependantPackages; |
78 | 79 | ||
79 | int executeIpkgCommand( QStringList &cmd, const QString option ); | 80 | int executeIpkgCommand( QStringList &cmd, const QString option ); |