@@ -5,7 +5,18 @@ var IResource_1 = require("../../resource/IResource");
5
5
var FSPath_1 = require ( "../../manager/FSPath" ) ;
6
6
var XML_1 = require ( "../../helper/XML" ) ;
7
7
var http = require ( "http" ) ;
8
- function lockDiscovery ( arg , path , resource , callback ) {
8
+ function lockDiscovery ( lockDiscoveryCache , arg , path , resource , callback ) {
9
+ var cached = lockDiscoveryCache [ path . toString ( ) ] ;
10
+ if ( cached ) {
11
+ callback ( null , cached ) ;
12
+ return ;
13
+ }
14
+ var _Callback = callback ;
15
+ callback = function ( e , l ) {
16
+ if ( ! e )
17
+ lockDiscoveryCache [ path . toString ( ) ] = l ;
18
+ _Callback ( e , l ) ;
19
+ } ;
9
20
arg . requireErPrivilege ( 'canListLocks' , resource , function ( e , can ) {
10
21
if ( e || ! can ) {
11
22
callback ( e , { } ) ;
@@ -14,7 +25,7 @@ function lockDiscovery(arg, path, resource, callback) {
14
25
resource . getLocks ( function ( e , locks ) {
15
26
if ( resource . parent ) {
16
27
var parentPath = path . getParent ( ) ;
17
- lockDiscovery ( arg , parentPath , resource . parent , function ( e , l ) {
28
+ lockDiscovery ( lockDiscoveryCache , arg , parentPath , resource . parent , function ( e , l ) {
18
29
if ( e )
19
30
callback ( e , null ) ;
20
31
else {
@@ -38,6 +49,7 @@ function default_1(arg, callback) {
38
49
callback ( ) ;
39
50
return ;
40
51
}
52
+ var lockDiscoveryCache = { } ;
41
53
arg . checkIfHeader ( resource , function ( ) {
42
54
var targetSource = arg . findHeader ( 'source' , 'F' ) . toUpperCase ( ) === 'T' ;
43
55
var multistatus = XML_1 . XML . createElement ( 'D:multistatus' , {
@@ -110,7 +122,7 @@ function default_1(arg, callback) {
110
122
if ( ! e ) {
111
123
response . ele ( 'D:href' ) . add ( arg . fullUri ( path ) . replace ( ' ' , '%20' ) ) ;
112
124
var lockdiscovery_1 = prop . ele ( 'D:lockdiscovery' ) ;
113
- lockDiscovery ( arg , new FSPath_1 . FSPath ( path ) , resource , function ( e , l ) {
125
+ lockDiscovery ( lockDiscoveryCache , arg , new FSPath_1 . FSPath ( path ) , resource , function ( e , l ) {
114
126
if ( e ) {
115
127
nbOut ( e ) ;
116
128
return ;
0 commit comments