Repository navigation
Expand file tree
/
Copy pathindex.js
More file actions
94 lines (82 loc) · 3.04 KB
/
Copy pathindex.js
File metadata and controls
94 lines (82 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
var tmp = require('tmp');
var SVN = require('node.svn');
var run = require('gulp-run');
module.exports = function resolver (bower) {
return {
match: function (source) {
return source.indexOf('svn+https://') === 0
|| source.indexOf('svn+http://') === 0;
},
// no normalisation required
locate: function (source) {
return source;
},
// returns a release corresponding to the last changed revision of the trunk
// e.g. if the last change was revision 12345, this is translated to the semantic version 12345.0.0
// this allows `bower update` to install the newest version from trunk
releases: function (source) {
var svnRemoteUrl = source.replace("svn+", "");
var tempDir = tmp.dirSync();
var svnConfig = { cwd: tempDir.name };
if(bower.config.svnResolver !== undefined) {
if(bower.config.svnResolver.password !== undefined)
svnConfig["username"] = bower.config.svnResolver.username;
if(bower.config.svnResolver && bower.config.svnResolver.password !== undefined)
svnConfig["password"] = bower.config.svnResolver.password;
}
var svn = new SVN(svnConfig);
return new Promise(function(resolve, reject) {
svn.info(svnRemoteUrl, function(err, svnInfo) {
if(err)
reject("Error during SVN info: "+err);
else {
var semVar = svnInfo.lastchangedrev+".0.0";
resolve([ { target: semVar, version: semVar } ]);
}
});
});
},
fetch: function (endpoint, cached) {
var svnRemoteUrl = endpoint.source.replace("svn+", "");
if(endpoint.target === "trunk")
svnRemoteUrl += "/trunk";
else if(endpoint.target === "-no-trunk")
svnRemoteUrl += ""; // don't append trunk directory
else if(endpoint.target.match(/^([1-9][0-9]*)\.0\.0$/)) {
var svnRevision = endpoint.target.replace(".0.0", "");
svnRemoteUrl += "/trunk@"+svnRevision;
} else if(endpoint.target.match(/^r([1-9][0-9]*)-no-trunk$/)) {
var svnRevision = endpoint.target.replace("-no-trunk","").replace("r","");
svnRemoteUrl += "/@"+svnRevision;
} else if(endpoint.target.match(/^r([1-9][0-9]*)$/)) {
var svnRevision = endpoint.target.replace("r","");
svnRemoteUrl += "/trunk@"+svnRevision;
} else if(endpoint.target !== undefined)
svnRemoteUrl += "/tags/"+endpoint.target;
var tempDir = tmp.dirSync();
var svnConfig = { cwd: tempDir.name };
if(bower.config.svnResolver !== undefined) {
if(bower.config.svnResolver.password !== undefined)
svnConfig["username"] = bower.config.svnResolver.username;
if(bower.config.svnResolver && bower.config.svnResolver.password !== undefined)
svnConfig["password"] = bower.config.svnResolver.password;
}
var svn = new SVN(svnConfig);
return new Promise(function (resolve, reject) {
svn.co(svnRemoteUrl, function (err, info) {
if(err)
reject("Error during SVN checkout: "+err);
else {
if ('win32' !== process.platform) {
run('chmod -R +X '+ tempDir.name).exec();
}
resolve({
tempPath: tempDir.name,
removeIgnores: true
});
}
});
});
}
}
}