Revision: 28313
http://sourceforge.net/p/bibdesk/svn/28313
Author: hofman
Date: 2023-07-14 14:49:10 +0000 (Fri, 14 Jul 2023)
Log Message:
-----------
create tar archive directly from linked files and .bib file, no need to copy
them to a temporary folder
Modified Paths:
--------------
trunk/bibdesk/BibDocument.m
Modified: trunk/bibdesk/BibDocument.m
===================================================================
--- trunk/bibdesk/BibDocument.m 2023-07-14 09:28:42 UTC (rev 28312)
+++ trunk/bibdesk/BibDocument.m 2023-07-14 14:49:10 UTC (rev 28313)
@@ -1258,8 +1258,7 @@
- (BOOL)writeArchiveToURL:(NSURL *)fileURL error:(NSError **)outError{
NSURL *dirURL = [fileURL URLByDeletingLastPathComponent];
- NSString *targetName = [[saveTargetURL lastPathComponent]
stringByDeletingPathExtension];
- NSURL *folderURL = [dirURL URLByAppendingPathComponent:targetName
isDirectory:YES];
+ NSString *bibtexFile = [[[saveTargetURL lastPathComponent]
stringByDeletingPathExtension] stringByAppendingPathExtension:@"bib"];
NSFileManager *fm = [NSFileManager defaultManager];
NSWorkspace *ws = [NSWorkspace sharedWorkspace];
NSString *filePath;
@@ -1267,56 +1266,43 @@
NSString *commonParent = nil;
NSMutableSet *localFiles = [NSMutableSet set];
NSSet *localFileFields = [[NSUserDefaults standardUserDefaults]
boolForKey:BDSKUseLocalUrlAndUrlKey] ? [[BDSKTypeManager sharedManager]
localFileFieldsSet] : nil;
- BOOL success = [fm createDirectoryAtURL:folderURL
withIntermediateDirectories:NO attributes:nil error:NULL];
+ BOOL success = YES;
- if (success) {
- for (BibItem *item in [self publicationsForSaving]) {
- for (BDSKLinkedFile *file in [item localFiles]) {
- if ((filePath = [file path]) && [fm fileExistsAtPath:filePath]
&& [ws isFolderAtPath:filePath] == NO) {
- [localFiles addObject:filePath];
- [parents addObject:[filePath
stringByDeletingLastPathComponent]];
- }
+ for (BibItem *item in [self publicationsForSaving]) {
+ for (BDSKLinkedFile *file in [item localFiles]) {
+ if ((filePath = [file path]) && [fm fileExistsAtPath:filePath] &&
[ws isFolderAtPath:filePath] == NO) {
+ [localFiles addObject:filePath];
+ [parents addObject:[filePath
stringByDeletingLastPathComponent]];
}
- for (NSString *field in localFileFields) {
- if ((filePath = [[item localFileURLForField:field] path]) &&
[fm fileExistsAtPath:filePath] && [ws isFolderAtPath:filePath] == NO) {
- [localFiles addObject:filePath];
- [parents addObject:[filePath
stringByDeletingLastPathComponent]];
- }
+ }
+ for (NSString *field in localFileFields) {
+ if ((filePath = [[item localFileURLForField:field] path]) && [fm
fileExistsAtPath:filePath] && [ws isFolderAtPath:filePath] == NO) {
+ [localFiles addObject:filePath];
+ [parents addObject:[filePath
stringByDeletingLastPathComponent]];
}
}
-
- for (filePath in parents)
- commonParent = commonParent ? [filePath
commonRootPathOfFile:commonParent] : filePath;
-
- NSData *bibtexData = [self bibTeXDataDroppingInternal:NO
relativeToPath:commonParent error:outError];
- NSURL *bibtexURL = [folderURL URLByAppendingPathComponent:[targetName
stringByAppendingPathExtension:@"bib"] isDirectory:NO];
+ }
+
+ for (filePath in parents)
+ commonParent = commonParent ? [filePath
commonRootPathOfFile:commonParent] : filePath;
+
+ NSData *bibtexData = [self bibTeXDataDroppingInternal:NO
relativeToPath:commonParent error:outError];
+ NSURL *bibtexURL = [dirURL URLByAppendingPathComponent:bibtexFile
isDirectory:NO];
- success = [bibtexData writeToURL:bibtexURL options:0 error:outError];
-
- for (filePath in localFiles) {
- if (success == NO) break;
- NSString *relativePath = commonParent ? [filePath
relativePathFromPath:commonParent] : [filePath lastPathComponent];
- NSURL *targetURL = [folderURL
URLByAppendingPathComponent:relativePath isDirectory:NO];
-
- if ([targetURL checkResourceIsReachableAndReturnError:NULL])
- targetURL = [fm uniqueFileURL:targetURL];
- success = [fm createPathToURL:targetURL attributes:nil];
- if (success)
- success = [fm copyItemAtURL:[NSURL fileURLWithPath:filePath
isDirectory:NO] toURL:targetURL error:NULL];
- }
-
- if (success) {
- NSTask *task = [[[BDSKTask alloc] init] autorelease];
- [task setLaunchPath:@"/usr/bin/tar"];
- [task setArguments:[NSArray arrayWithObjects:@"-czf", [[fileURL
path] lastPathComponent], targetName, nil]];
- [task setCurrentDirectoryPath:[dirURL path]];
- @try { [task launch]; }
- @catch (id e) {}
- [task waitUntilExit];
- success = [task terminationStatus] == 0;
- }
-
- [fm removeItemAtURL:folderURL error:NULL];
+ success = [bibtexData writeToURL:bibtexURL options:0 error:outError];
+
+ if (success) {
+ NSMutableArray *args = [NSMutableArray arrayWithObjects:@"-czf",
[fileURL path], bibtexFile, @"-C", commonParent, nil];
+ for (filePath in localFiles)
+ [args addObject:[filePath relativePathFromPath:commonParent]];
+ NSTask *task = [[[BDSKTask alloc] init] autorelease];
+ [task setLaunchPath:@"/usr/bin/tar"];
+ [task setArguments:args];
+ [task setCurrentDirectoryPath:[dirURL path]];
+ @try { [task launch]; }
+ @catch (id e) {}
+ [task waitUntilExit];
+ success = [task terminationStatus] == 0;
}
return success;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit