Ticket #1643: 1643.diff
File 1643.diff, 10.2 KB (added by warner, at 2013-04-12T19:47:30Z) |
---|
-
src/allmydata/scripts/common.py
diff --git a/src/allmydata/scripts/common.py b/src/allmydata/scripts/common.py index 27ea9af..bd78430 100644
a b DEFAULT_ALIAS = u"tahoe" 72 72 73 73 74 74 def get_aliases(nodedir): 75 from allmydata import uri76 75 aliases = {} 77 76 aliasfile = os.path.join(nodedir, "private", "aliases") 78 77 rootfile = os.path.join(nodedir, "private", "root_dir.cap") … … def get_aliases(nodedir): 80 79 f = open(rootfile, "r") 81 80 rootcap = f.read().strip() 82 81 if rootcap: 83 aliases[DEFAULT_ALIAS] = uri.from_string_dirnode(rootcap).to_string()82 aliases[DEFAULT_ALIAS] = rootcap 84 83 except EnvironmentError: 85 84 pass 86 85 try: … … def get_aliases(nodedir): 92 91 name, cap = line.split(u":", 1) 93 92 # normalize it: remove http: prefix, urldecode 94 93 cap = cap.strip().encode('utf-8') 95 aliases[name] = uri.from_string_dirnode(cap).to_string()94 aliases[name] = cap 96 95 except EnvironmentError: 97 96 pass 98 97 return aliases … … def get_alias(aliases, path_unicode, default): 158 157 raise UnknownAliasError("No alias specified, and the default %s alias doesn't exist. " 159 158 "To create it, use 'tahoe create-alias %s'." 160 159 % (quote_output(default), quote_output(default, quotemarks=False))) 161 return aliases[default], path160 return uri.from_string_dirnode(aliases[default]).to_string(), path 162 161 if colon == 1 and default is None and platform_uses_lettercolon_drivename(): 163 162 # treat C:\why\must\windows\be\so\weird as a local path, not a tahoe 164 163 # file in the "C:" alias … … def get_alias(aliases, path_unicode, default): 175 174 raise UnknownAliasError("No alias specified, and the default %s alias doesn't exist. " 176 175 "To create it, use 'tahoe create-alias %s'." 177 176 % (quote_output(default), quote_output(default, quotemarks=False))) 178 return aliases[default], path177 return uri.from_string_dirnode(aliases[default]).to_string(), path 179 178 if alias not in aliases: 180 179 raise UnknownAliasError("Unknown alias %s, please create it with 'tahoe add-alias' or 'tahoe create-alias'." % 181 180 quote_output(alias)) 182 return aliases[alias], path[colon+1:]181 return uri.from_string_dirnode(aliases[alias]).to_string(), path[colon+1:] 183 182 184 183 def escape_path(path): 185 184 segments = path.split("/") -
src/allmydata/test/test_cli.py
diff --git a/src/allmydata/test/test_cli.py b/src/allmydata/test/test_cli.py index 658d3ce..0c06d18 100644
a b class CLI(CLITestMixin, unittest.TestCase): 397 397 "didn't see 'mqfblse6m5a6dh45isu2cg7oji' in '%s'" % err) 398 398 399 399 def test_alias(self): 400 aliases = {"tahoe": "TA", 401 "work": "WA", 402 "c": "CA"} 400 def s128(c): return base32.b2a(c*(128/8)) 401 def s256(c): return base32.b2a(c*(256/8)) 402 TA = "URI:DIR2:%s:%s" % (s128("T"), s256("T")) 403 WA = "URI:DIR2:%s:%s" % (s128("W"), s256("W")) 404 CA = "URI:DIR2:%s:%s" % (s128("C"), s256("C")) 405 aliases = {"tahoe": TA, 406 "work": WA, 407 "c": CA} 403 408 def ga1(path): 404 409 return get_alias(aliases, path, u"tahoe") 405 410 uses_lettercolon = common.platform_uses_lettercolon_drivename() 406 self.failUnlessReallyEqual(ga1(u"bare"), ( "TA", "bare"))407 self.failUnlessReallyEqual(ga1(u"baredir/file"), ( "TA", "baredir/file"))408 self.failUnlessReallyEqual(ga1(u"baredir/file:7"), ( "TA", "baredir/file:7"))409 self.failUnlessReallyEqual(ga1(u"tahoe:"), ( "TA", ""))410 self.failUnlessReallyEqual(ga1(u"tahoe:file"), ( "TA", "file"))411 self.failUnlessReallyEqual(ga1(u"tahoe:dir/file"), ( "TA", "dir/file"))412 self.failUnlessReallyEqual(ga1(u"work:"), ( "WA", ""))413 self.failUnlessReallyEqual(ga1(u"work:file"), ( "WA", "file"))414 self.failUnlessReallyEqual(ga1(u"work:dir/file"), ( "WA", "dir/file"))411 self.failUnlessReallyEqual(ga1(u"bare"), (TA, "bare")) 412 self.failUnlessReallyEqual(ga1(u"baredir/file"), (TA, "baredir/file")) 413 self.failUnlessReallyEqual(ga1(u"baredir/file:7"), (TA, "baredir/file:7")) 414 self.failUnlessReallyEqual(ga1(u"tahoe:"), (TA, "")) 415 self.failUnlessReallyEqual(ga1(u"tahoe:file"), (TA, "file")) 416 self.failUnlessReallyEqual(ga1(u"tahoe:dir/file"), (TA, "dir/file")) 417 self.failUnlessReallyEqual(ga1(u"work:"), (WA, "")) 418 self.failUnlessReallyEqual(ga1(u"work:file"), (WA, "file")) 419 self.failUnlessReallyEqual(ga1(u"work:dir/file"), (WA, "dir/file")) 415 420 # default != None means we really expect a tahoe path, regardless of 416 421 # whether we're on windows or not. This is what 'tahoe get' uses. 417 self.failUnlessReallyEqual(ga1(u"c:"), ( "CA", ""))418 self.failUnlessReallyEqual(ga1(u"c:file"), ( "CA", "file"))419 self.failUnlessReallyEqual(ga1(u"c:dir/file"), ( "CA", "dir/file"))422 self.failUnlessReallyEqual(ga1(u"c:"), (CA, "")) 423 self.failUnlessReallyEqual(ga1(u"c:file"), (CA, "file")) 424 self.failUnlessReallyEqual(ga1(u"c:dir/file"), (CA, "dir/file")) 420 425 self.failUnlessReallyEqual(ga1(u"URI:stuff"), ("URI:stuff", "")) 421 426 self.failUnlessReallyEqual(ga1(u"URI:stuff/file"), ("URI:stuff", "file")) 422 427 self.failUnlessReallyEqual(ga1(u"URI:stuff:./file"), ("URI:stuff", "file")) … … class CLI(CLITestMixin, unittest.TestCase): 435 440 (DefaultAliasMarker, "baredir/file:7")) 436 441 self.failUnlessReallyEqual(ga2(u"baredir/sub:1/file:7"), 437 442 (DefaultAliasMarker, "baredir/sub:1/file:7")) 438 self.failUnlessReallyEqual(ga2(u"tahoe:"), ( "TA", ""))439 self.failUnlessReallyEqual(ga2(u"tahoe:file"), ( "TA", "file"))440 self.failUnlessReallyEqual(ga2(u"tahoe:dir/file"), ( "TA", "dir/file"))443 self.failUnlessReallyEqual(ga2(u"tahoe:"), (TA, "")) 444 self.failUnlessReallyEqual(ga2(u"tahoe:file"), (TA, "file")) 445 self.failUnlessReallyEqual(ga2(u"tahoe:dir/file"), (TA, "dir/file")) 441 446 # on windows, we really want c:foo to indicate a local file. 442 447 # default==None is what 'tahoe cp' uses. 443 448 if uses_lettercolon: … … class CLI(CLITestMixin, unittest.TestCase): 446 451 self.failUnlessReallyEqual(ga2(u"c:dir/file"), 447 452 (DefaultAliasMarker, "c:dir/file")) 448 453 else: 449 self.failUnlessReallyEqual(ga2(u"c:"), ( "CA", ""))450 self.failUnlessReallyEqual(ga2(u"c:file"), ( "CA", "file"))451 self.failUnlessReallyEqual(ga2(u"c:dir/file"), ( "CA", "dir/file"))452 self.failUnlessReallyEqual(ga2(u"work:"), ( "WA", ""))453 self.failUnlessReallyEqual(ga2(u"work:file"), ( "WA", "file"))454 self.failUnlessReallyEqual(ga2(u"work:dir/file"), ( "WA", "dir/file"))454 self.failUnlessReallyEqual(ga2(u"c:"), (CA, "")) 455 self.failUnlessReallyEqual(ga2(u"c:file"), (CA, "file")) 456 self.failUnlessReallyEqual(ga2(u"c:dir/file"), (CA, "dir/file")) 457 self.failUnlessReallyEqual(ga2(u"work:"), (WA, "")) 458 self.failUnlessReallyEqual(ga2(u"work:file"), (WA, "file")) 459 self.failUnlessReallyEqual(ga2(u"work:dir/file"), (WA, "dir/file")) 455 460 self.failUnlessReallyEqual(ga2(u"URI:stuff"), ("URI:stuff", "")) 456 461 self.failUnlessReallyEqual(ga2(u"URI:stuff/file"), ("URI:stuff", "file")) 457 462 self.failUnlessReallyEqual(ga2(u"URI:stuff:./file"), ("URI:stuff", "file")) … … class CLI(CLITestMixin, unittest.TestCase): 476 481 (DefaultAliasMarker, "baredir/file:7")) 477 482 self.failUnlessReallyEqual(ga3(u"baredir/sub:1/file:7"), 478 483 (DefaultAliasMarker, "baredir/sub:1/file:7")) 479 self.failUnlessReallyEqual(ga3(u"tahoe:"), ( "TA", ""))480 self.failUnlessReallyEqual(ga3(u"tahoe:file"), ( "TA", "file"))481 self.failUnlessReallyEqual(ga3(u"tahoe:dir/file"), ( "TA", "dir/file"))484 self.failUnlessReallyEqual(ga3(u"tahoe:"), (TA, "")) 485 self.failUnlessReallyEqual(ga3(u"tahoe:file"), (TA, "file")) 486 self.failUnlessReallyEqual(ga3(u"tahoe:dir/file"), (TA, "dir/file")) 482 487 self.failUnlessReallyEqual(ga3(u"c:"), (DefaultAliasMarker, "c:")) 483 488 self.failUnlessReallyEqual(ga3(u"c:file"), (DefaultAliasMarker, "c:file")) 484 489 self.failUnlessReallyEqual(ga3(u"c:dir/file"), 485 490 (DefaultAliasMarker, "c:dir/file")) 486 self.failUnlessReallyEqual(ga3(u"work:"), ( "WA", ""))487 self.failUnlessReallyEqual(ga3(u"work:file"), ( "WA", "file"))488 self.failUnlessReallyEqual(ga3(u"work:dir/file"), ( "WA", "dir/file"))491 self.failUnlessReallyEqual(ga3(u"work:"), (WA, "")) 492 self.failUnlessReallyEqual(ga3(u"work:file"), (WA, "file")) 493 self.failUnlessReallyEqual(ga3(u"work:dir/file"), (WA, "dir/file")) 489 494 self.failUnlessReallyEqual(ga3(u"URI:stuff"), ("URI:stuff", "")) 490 495 self.failUnlessReallyEqual(ga3(u"URI:stuff:./file"), ("URI:stuff", "file")) 491 496 self.failUnlessReallyEqual(ga3(u"URI:stuff:./dir/file"), ("URI:stuff", "dir/file")) … … class CLI(CLITestMixin, unittest.TestCase): 510 515 return retval 511 516 self.failUnlessRaises(common.UnknownAliasError, ga5, u"C:\\Windows") 512 517 518 def test_alias_tolerance(self): 519 def s128(c): return base32.b2a(c*(128/8)) 520 def s256(c): return base32.b2a(c*(256/8)) 521 TA = "URI:DIR2:%s:%s" % (s128("T"), s256("T")) 522 aliases = {"present": TA, 523 "future": "URI-FROM-FUTURE:ooh:aah"} 524 def ga1(path): 525 return get_alias(aliases, path, u"tahoe") 526 self.failUnlessReallyEqual(ga1(u"present:file"), (TA, "file")) 527 # this throws, via assert IDirnodeURI.providedBy(), since get_alias() 528 # wants a dirnode, and the future cap gives us UnknownURI instead. 529 #ga1(u"future:stuff") 530 513 531 def test_listdir_unicode_good(self): 514 532 filenames = [u'L\u00F4zane', u'Bern', u'Gen\u00E8ve'] # must be NFC 515 533