mirror of
https://github.com/danog/dart-sass.git
synced 2024-11-26 12:14:42 +01:00
43 lines
1.4 KiB
Dart
43 lines
1.4 KiB
Dart
// Copyright 2019 Google Inc. Use of this source code is governed by an
|
|
// MIT-style license that can be found in the LICENSE file or at
|
|
// https://opensource.org/licenses/MIT.
|
|
|
|
import 'dart:io';
|
|
|
|
import 'package:grinder/grinder.dart';
|
|
import 'package:path/path.dart' as p;
|
|
|
|
/// Ensure that the repository at [url] is cloned into the build directory and
|
|
/// pointing to the latest master revision.
|
|
///
|
|
/// Returns the path to the repository.
|
|
Future<String> cloneOrPull(String url) async =>
|
|
cloneOrCheckout(url, "origin/main");
|
|
|
|
/// Ensure that the repository at [url] is cloned into the build directory and
|
|
/// pointing to [ref].
|
|
///
|
|
/// Returns the path to the repository.
|
|
Future<String> cloneOrCheckout(String url, String ref) async {
|
|
var name = p.url.basename(url);
|
|
if (p.url.extension(name) == ".git") name = p.url.withoutExtension(name);
|
|
|
|
var path = p.join("build", name);
|
|
|
|
if (Directory(p.join(path, '.git')).existsSync()) {
|
|
log("Updating $url");
|
|
await runAsync("git",
|
|
arguments: ["fetch", "origin"], workingDirectory: path);
|
|
} else {
|
|
delete(Directory(path));
|
|
await runAsync("git", arguments: ["clone", url, path]);
|
|
await runAsync("git",
|
|
arguments: ["config", "advice.detachedHead", "false"],
|
|
workingDirectory: path);
|
|
}
|
|
await runAsync("git", arguments: ["checkout", ref], workingDirectory: path);
|
|
log("");
|
|
|
|
return path;
|
|
}
|