Overview
Comment: | Updated to deal with having no home directory gracefully and fixed bug introduced with childcount patch |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
c0f54be8fb7f947a7ffc16ae0e197811 |
User & Date: | rkeene on 2014-11-10 06:19:12 |
Other Links: | manifest | tags |
Context
2014-11-10
| ||
06:47 | Made home directory part user-servicable via config file check-in: dde1c0a38d user: rkeene tags: trunk | |
06:19 | Updated to deal with having no home directory gracefully and fixed bug introduced with childcount patch check-in: c0f54be8fb user: rkeene tags: trunk | |
05:57 | Moved to tcl-ops branch check-in: 0effed3239 user: rkeene tags: trunk | |
Changes
Modified appfsd.tcl from [85c7175a51] to [9561940a42].
︙ | ︙ | |||
350 351 352 353 354 355 356 | } } return COMPLETE } proc _localpath {package hostname file} { | > > | | > > > | | > | 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 | } } return COMPLETE } proc _localpath {package hostname file} { set dir "" catch { set homedir [::appfsd::get_homedir] set dir [file join $homedir .appfs "./${package}@${hostname}" "./${file}"] } return $dir } proc _whiteoutpath {package hostname file} { set dir "" catch { set homedir [::appfsd::get_homedir] set dir [file join $homedir .appfs "./${package}@${hostname}" ".APPFS.WHITEOUT" "./${file}.APPFS.WHITEOUT"] } return $dir } proc _parsepath {path} { set path [string trim $path "/"] set path [split $path "/"] set pathlen [llength $path] |
︙ | ︙ | |||
474 475 476 477 478 479 480 | set retval [::appfs::db eval {SELECT DISTINCT file_name FROM files WHERE package_sha1 = $pathinfo(package_sha1) AND file_directory = $pathinfo(file);}] if {[info exists pathinfo(package)] && [info exists pathinfo(hostname)] && [info exists pathinfo(file)]} { _as_user { set dir [_localpath $pathinfo(package) $pathinfo(hostname) $pathinfo(file)] set whiteoutdir [string range [_whiteoutpath $pathinfo(package) $pathinfo(hostname) $pathinfo(file)] 0 end-15] | > | | | | | | | | > > | | | | | | | | | | | > | 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 | set retval [::appfs::db eval {SELECT DISTINCT file_name FROM files WHERE package_sha1 = $pathinfo(package_sha1) AND file_directory = $pathinfo(file);}] if {[info exists pathinfo(package)] && [info exists pathinfo(hostname)] && [info exists pathinfo(file)]} { _as_user { set dir [_localpath $pathinfo(package) $pathinfo(hostname) $pathinfo(file)] set whiteoutdir [string range [_whiteoutpath $pathinfo(package) $pathinfo(hostname) $pathinfo(file)] 0 end-15] if {$whiteoutdir != ""} { foreach file [glob -nocomplain -tails -directory $whiteoutdir {{.,}*.APPFS.WHITEOUT}] { set remove [string range $file 0 end-15] set idx [lsearch -exact $retval $remove] if {$idx != -1} { set retval [lreplace $retval $idx $idx] } } } if {$dir != ""} { foreach file [glob -nocomplain -tails -directory $dir {{.,}*}] { if {$file == "." || $file == ".."} { continue } if {$file == ".APPFS.WHITEOUT"} { continue } if {[lsearch -exact $retval $file] != -1} { continue } lappend retval $file } } } } return $retval } } |
︙ | ︙ | |||
569 570 571 572 573 574 575 | set localpath [_localpath $pathinfo(package) $pathinfo(hostname) $pathinfo(file)] set whiteoutpath [_whiteoutpath $pathinfo(package) $pathinfo(hostname) $pathinfo(file)] set retval(localpath) $localpath set retval(whiteoutpath) $whiteoutpath | | | 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 | set localpath [_localpath $pathinfo(package) $pathinfo(hostname) $pathinfo(file)] set whiteoutpath [_whiteoutpath $pathinfo(package) $pathinfo(hostname) $pathinfo(file)] set retval(localpath) $localpath set retval(whiteoutpath) $whiteoutpath if {$localpath != "" && [file exists $localpath]} { set retval(is_localfile) 1 catch { _as_user { file lstat $localpath localpathinfo } set retval(time) $localpathinfo(mtime) |
︙ | ︙ | |||
611 612 613 614 615 616 617 | "socket" { # Capitalized so that the first char is unique set retval(type) "Socket" } } } err } else { | | | | 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 | "socket" { # Capitalized so that the first char is unique set retval(type) "Socket" } } } err } else { if {$whiteoutpath == "" || ![file exists $whiteoutpath]} { set retval(is_remotefile) 1 set work [split $pathinfo(file) "/"] set directory [join [lrange $work 0 end-1] "/"] set file [lindex $work end] if {$directory == "" && $file == ""} { array set retval [list type directory] } ::appfs::db eval {SELECT type, time, source, size, perms FROM files WHERE package_sha1 = $pathinfo(package_sha1) AND file_directory = $directory AND file_name = $file;} retval {} if {[info exists retval(type)] && $retval(type) == "directory"} { set retval(childcount) [llength [getchildren $path]] } unset -nocomplain retval(*) } } |
︙ | ︙ | |||
652 653 654 655 656 657 658 659 660 661 | if {$pathinfo(_type) != "files"} { return -code error "invalid type" } set localpath [_localpath $pathinfo(package) $pathinfo(hostname) $pathinfo(file)] if {$mode == "create"} { return $localpath } | > > > > | | 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 | if {$pathinfo(_type) != "files"} { return -code error "invalid type" } set localpath [_localpath $pathinfo(package) $pathinfo(hostname) $pathinfo(file)] if {$mode == "create"} { if {$localpath == ""} { return -code error "Asked to create, but no home directory." } return $localpath } if {$localpath != "" && [file exists $localpath]} { return $localpath } set work [split $pathinfo(file) "/"] set directory [join [lrange $work 0 end-1] "/"] set file [lindex $work end] ::appfs::db eval {SELECT file_sha1, perms FROM files WHERE package_sha1 = $pathinfo(package_sha1) AND file_name = $file AND file_directory = $directory;} pkgpathinfo {} |
︙ | ︙ | |||
738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 | if {$must_not_exist} { if {[exists $path] != ""} { return -code error "File already exists" } } set filename [localpath $path] set dirname [file dirname $filename] _as_user { file mkdir $dirname } return $filename } proc unlinkpath {path} { array set pathattrs [exists $path] if {![info exists pathattrs(packaged)]} { return -code error "invalid type" } set localpath $pathattrs(localpath) if {[info exists pathattrs(is_localfile)]} { if {[file isdirectory $localpath]} { set children [getchildren $path] if {[llength $children] != 0} { return -code error "Asked to delete non-empty directory" | > > > > > > > > | 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 | if {$must_not_exist} { if {[exists $path] != ""} { return -code error "File already exists" } } set filename [localpath $path] if {$filename == ""} { return -code error "Asked to create, but no home directory." } set dirname [file dirname $filename] _as_user { file mkdir $dirname } return $filename } proc unlinkpath {path} { array set pathattrs [exists $path] if {![info exists pathattrs(packaged)]} { return -code error "invalid type" } set localpath $pathattrs(localpath) if {$localpath == ""} { return -code error "Asked to delete, but no home directory." } if {[info exists pathattrs(is_localfile)]} { if {[file isdirectory $localpath]} { set children [getchildren $path] if {[llength $children] != 0} { return -code error "Asked to delete non-empty directory" |
︙ | ︙ |