-rw-r--r-- | noncore/settings/aqpkg/ipkg.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp index f8513e4..6d0edad 100644 --- a/noncore/settings/aqpkg/ipkg.cpp +++ b/noncore/settings/aqpkg/ipkg.cpp | |||
@@ -92,75 +92,78 @@ bool Ipkg :: runIpkg( ) | |||
92 | 92 | ||
93 | } | 93 | } |
94 | 94 | ||
95 | #ifdef X86 | 95 | #ifdef X86 |
96 | cmd += " -f "; | 96 | cmd += " -f "; |
97 | cmd += IPKG_CONF; | 97 | cmd += IPKG_CONF; |
98 | #endif | 98 | #endif |
99 | 99 | ||
100 | cmd += " " + option; | 100 | cmd += " " + option; |
101 | if ( option != "upgrade" ) | 101 | if ( option != "upgrade" ) |
102 | cmd += " " + package; | 102 | cmd += " " + package; |
103 | cmd += " 2>&1"; | 103 | cmd += " 2>&1"; |
104 | 104 | ||
105 | qApp->processEvents(); | 105 | qApp->processEvents(); |
106 | 106 | ||
107 | // If we are removing packages and make links option is selected | 107 | // If we are removing packages and make links option is selected |
108 | // create the links | 108 | // create the links |
109 | if ( option == "remove" ) | 109 | if ( option == "remove" ) |
110 | { | 110 | { |
111 | createLinks = false; | 111 | createLinks = false; |
112 | if ( flags & MAKE_LINKS ) | 112 | if ( flags & MAKE_LINKS ) |
113 | { | 113 | { |
114 | emit outputText( QString( "Removing symbolic links...\n" ) ); | 114 | emit outputText( QString( "Removing symbolic links...\n" ) ); |
115 | linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); | 115 | linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); |
116 | emit outputText( QString( " " ) ); | ||
116 | } | 117 | } |
117 | } | 118 | } |
118 | 119 | ||
119 | emit outputText( cmd ); | 120 | emit outputText( cmd ); |
120 | 121 | ||
121 | // Execute command | 122 | // Execute command |
122 | dependantPackages = new QList<QString>; | 123 | dependantPackages = new QList<QString>; |
123 | dependantPackages->setAutoDelete( true ); | 124 | dependantPackages->setAutoDelete( true ); |
124 | 125 | ||
125 | ret = executeIpkgCommand( cmd, option ); | 126 | ret = executeIpkgCommand( cmd, option ); |
126 | 127 | ||
127 | if ( option == "install" ) | 128 | if ( option == "install" ) |
128 | { | 129 | { |
129 | // If we are not removing packages and make links option is selected | 130 | // If we are not removing packages and make links option is selected |
130 | // create the links | 131 | // create the links |
131 | createLinks = true; | 132 | createLinks = true; |
132 | if ( flags & MAKE_LINKS ) | 133 | if ( flags & MAKE_LINKS ) |
133 | { | 134 | { |
134 | emit outputText( " " ); | 135 | emit outputText( " " ); |
135 | emit outputText( QString( "Creating symbolic links for " )+ package ); | 136 | emit outputText( QString( "Creating symbolic links for " )+ package ); |
136 | 137 | ||
137 | linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); | 138 | linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); |
138 | 139 | ||
139 | // link dependant packages that were installed with this release | 140 | // link dependant packages that were installed with this release |
140 | QString *pkg; | 141 | QString *pkg; |
141 | for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() ) | 142 | for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() ) |
142 | { | 143 | { |
144 | if ( *pkg == package ) | ||
145 | continue; | ||
143 | emit outputText( " " ); | 146 | emit outputText( " " ); |
144 | emit outputText( QString( "Creating symbolic links for " )+ (*pkg) ); | 147 | emit outputText( QString( "Creating symbolic links for " )+ (*pkg) ); |
145 | linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); | 148 | linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); |
146 | } | 149 | } |
147 | } | 150 | } |
148 | } | 151 | } |
149 | 152 | ||
150 | delete dependantPackages; | 153 | delete dependantPackages; |
151 | 154 | ||
152 | emit outputText( QString( "Finished - status=" ) + (ret ? "success" : "failure") ); | 155 | emit outputText( QString( "Finished - status=" ) + (ret ? "success" : "failure") ); |
153 | return ret; | 156 | return ret; |
154 | } | 157 | } |
155 | 158 | ||
156 | 159 | ||
157 | int Ipkg :: executeIpkgCommand( QString &cmd, const QString option ) | 160 | int Ipkg :: executeIpkgCommand( QString &cmd, const QString option ) |
158 | { | 161 | { |
159 | FILE *fp = NULL; | 162 | FILE *fp = NULL; |
160 | char line[130]; | 163 | char line[130]; |
161 | QString lineStr, lineStrOld; | 164 | QString lineStr, lineStrOld; |
162 | int ret = false; | 165 | int ret = false; |
163 | 166 | ||
164 | fp = popen( (const char *) cmd, "r"); | 167 | fp = popen( (const char *) cmd, "r"); |
165 | if ( fp == NULL ) | 168 | if ( fp == NULL ) |
166 | { | 169 | { |
@@ -263,59 +266,68 @@ QStringList* Ipkg :: getList( const QString &packageFilename, const QString &des | |||
263 | 266 | ||
264 | f.close(); | 267 | f.close(); |
265 | return fileList; | 268 | return fileList; |
266 | } | 269 | } |
267 | 270 | ||
268 | void Ipkg :: processFileList( const QStringList *fileList, const QString &destDir ) | 271 | void Ipkg :: processFileList( const QStringList *fileList, const QString &destDir ) |
269 | { | 272 | { |
270 | if ( !fileList || fileList->isEmpty() ) | 273 | if ( !fileList || fileList->isEmpty() ) |
271 | return; | 274 | return; |
272 | 275 | ||
273 | QString baseDir = ROOT; | 276 | QString baseDir = ROOT; |
274 | 277 | ||
275 | if ( createLinks == true ) | 278 | if ( createLinks == true ) |
276 | { | 279 | { |
277 | for ( uint i=0; i < fileList->count(); i++ ) | 280 | for ( uint i=0; i < fileList->count(); i++ ) |
278 | { | 281 | { |
279 | processLinkDir( (*fileList)[i], baseDir, destDir ); | 282 | processLinkDir( (*fileList)[i], baseDir, destDir ); |
280 | qApp->processEvents(); | 283 | qApp->processEvents(); |
281 | } | 284 | } |
282 | } | 285 | } |
283 | else | 286 | else |
284 | { | 287 | { |
285 | for ( int i = fileList->count()-1; i >= 0 ; i-- ) | 288 | for ( int i = fileList->count()-1; i >= 0 ; i-- ) |
286 | { | 289 | { |
287 | cout << "i = " << i << ", Dealing with " << (*fileList)[i] << endl; | ||
288 | processLinkDir( (*fileList)[i], baseDir, destDir ); | 290 | processLinkDir( (*fileList)[i], baseDir, destDir ); |
289 | qApp->processEvents(); | 291 | qApp->processEvents(); |
290 | } | 292 | } |
291 | } | 293 | } |
292 | } | 294 | } |
293 | 295 | ||
294 | void Ipkg :: processLinkDir( const QString &file, const QString &destDir, const QString &baseDir ) | 296 | void Ipkg :: processLinkDir( const QString &file, const QString &destDir, const QString &baseDir ) |
295 | { | 297 | { |
298 | |||
296 | QString sourceFile = baseDir + file; | 299 | QString sourceFile = baseDir + file; |
297 | QString linkFile = destDir + file; | 300 | |
301 | QString linkFile = destDir; | ||
302 | if ( file.startsWith( "/" ) && destDir.right( 1 ) == "/" ) | ||
303 | { | ||
304 | linkFile += file.mid( 1 ); | ||
305 | } | ||
306 | else | ||
307 | { | ||
308 | linkFile += file; | ||
309 | } | ||
298 | QString text; | 310 | QString text; |
299 | if ( createLinks ) | 311 | if ( createLinks ) |
300 | { | 312 | { |
301 | // If this file is a directory (ends with a /) and it doesn't exist, | 313 | // If this file is a directory (ends with a /) and it doesn't exist, |
302 | // we need to create it | 314 | // we need to create it |
303 | if ( file.right(1) == "/" ) | 315 | if ( file.right(1) == "/" ) |
304 | { | 316 | { |
305 | QFileInfo f( linkFile ); | 317 | QFileInfo f( linkFile ); |
306 | if ( !f.exists() ) | 318 | if ( !f.exists() ) |
307 | { | 319 | { |
308 | emit outputText( QString( "Creating directory " ) + linkFile ); | 320 | emit outputText( QString( "Creating directory " ) + linkFile ); |
309 | QDir d; | 321 | QDir d; |
310 | d.mkdir( linkFile, true ); | 322 | d.mkdir( linkFile, true ); |
311 | } | 323 | } |
312 | else | 324 | else |
313 | emit outputText( QString( "Directory " ) + linkFile + " exists" ); | 325 | emit outputText( QString( "Directory " ) + linkFile + " exists" ); |
314 | 326 | ||
315 | } | 327 | } |
316 | else | 328 | else |
317 | { | 329 | { |
318 | int rc = symlink( sourceFile, linkFile ); | 330 | int rc = symlink( sourceFile, linkFile ); |
319 | text = (rc == 0 ? "Linked " : "Failed to link "); | 331 | text = (rc == 0 ? "Linked " : "Failed to link "); |
320 | text += sourceFile + " to " + linkFile; | 332 | text += sourceFile + " to " + linkFile; |
321 | emit outputText( text ); | 333 | emit outputText( text ); |