Index: utils/pub/command_lish.dart |
diff --git a/utils/pub/command_lish.dart b/utils/pub/command_lish.dart |
index 420952c95a879fd98e9780457f2f833a9b8cbdec..01c03bca451451dd42ed3fa05a98ff456714829e 100644 |
--- a/utils/pub/command_lish.dart |
+++ b/utils/pub/command_lish.dart |
@@ -15,6 +15,7 @@ import 'git.dart' as git; |
import 'io.dart'; |
import 'log.dart' as log; |
import 'oauth2.dart' as oauth2; |
+import 'path.dart' as path; |
import 'pub.dart'; |
import 'validator.dart'; |
@@ -164,7 +165,20 @@ class LishCommand extends PubCommand { |
// Should instead only make these relative right before generating |
// the tree display (which is what really needs them to be). |
// Make it relative to the package root. |
- return relativeTo(entry, rootDir); |
+ entry = relativeTo(entry, rootDir); |
+ |
+ // TODO(rnystrom): dir.list() will include paths with resolved |
+ // symlinks. In particular, we'll get paths to symlinked files from |
+ // "packages" that reach outside of this package. Since the path |
+ // has already been resolved, we don't even see "packages" in that |
+ // path anymore. |
+ // These should not be included in the archive. As a hack, ignore |
+ // any file whose relative path is backing out of the root |
+ // directory. Should do something cleaner. |
+ var parts = path.split(entry); |
+ if (!parts.isEmpty && parts[0] == '..') return null; |
+ |
+ return entry; |
}); |
})); |
}); |