blob: 3b81d807a2366ef66782d442b061ebd1d52dbbf8 [file] [log] [blame]
// Copyright 2020 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'package:cocoon_service/src/model/appengine/branch.dart';
import 'package:process_runner/process_runner.dart';
import '../../cocoon_service.dart';
import '../service/datastore.dart';
/// Return currently active branches across all repos.
///
/// Returns all branches with associated key, branch name and repository name, for branches with recent commit acitivies
/// within the past [GetBranches.kActiveBranchActivityPeriod] days.
///
/// GET: /api/public/get-branches
///
///
/// Response: Status 200 OK
///[
/// {
/// "key":ahFmbHV0dGVyLWRhc2hib2FyZHIuCxIGQnJhbmNoIiJmbHV0dGVyL2ZsdXR0ZXIvYnJhbmNoLWNyZWF0ZWQtb2xkDKIBCVtkZWZhdWx0XQ,
/// "branch":{
/// "branch":"branch-created-old",
/// "repository":"flutter/flutter"
/// }
/// }
/// {
/// "key":ahFmbHV0dGVyLWRhc2hib2FyZHIuCxIGQnJhbmNoIiJmbHV0dGVyL2ZsdXR0ZXIvYnJhbmNoLWNyZWF0ZWQtbm93DKIBCVtkZWZhdWx0XQ,
/// "branch":{
/// "branch":"branch-created-now",
/// "repository":"flutter/flutter"
/// }
/// }
///]
class GetBranches extends RequestHandler<Body> {
GetBranches({
required super.config,
this.datastoreProvider = DatastoreService.defaultProvider,
this.processRunner,
});
final DatastoreServiceProvider datastoreProvider;
ProcessRunner? processRunner;
static const Duration kActiveBranchActivity = Duration(days: 60);
@override
Future<Body> get() async {
final DatastoreService datastore = datastoreProvider(config.db);
final List<Branch> branches = await datastore
.queryBranches()
.where(
(Branch b) => DateTime.now().millisecondsSinceEpoch - b.lastActivity! < kActiveBranchActivity.inMilliseconds,
)
.toList();
return Body.forJson(branches);
}
}