gradle plugin dev.flutter.flutter-gradle-plugin stuck

Is there an existing issue for this?

[X] I have searched the existing issues
[X] I have read the guide to filing a bug

Steps to reproduce
1.android => app => build.gradle.kts
plugins {
    id("com.android.application")
    kotlin("android")
    kotlin("kapt")
    id("dev.flutter.flutter-gradle-plugin")
}
extensions.configure<FlutterExtension>("flutter") {
    this.source = "../.."
    println("flutter.source  ${this.source}")
}

2.android => settings.gradle.kts
pluginManagement {
    val agpVersion: String by settings
    val kotlinVersion: String by settings
    val kspVersion: String by settings
    val flutterVersion: String by settings
    var sdkPathExists = false
    fun flutterSdkPath(): String? {
        val properties = java.util.Properties()
        file("local.properties").inputStream().use { properties.load(it) }
        val flutterSdkPath = properties.getProperty("flutter.sdk")
        assert(flutterSdkPath != null) {
            "flutter.sdk not set in local.properties"
        }
        return flutterSdkPath
    }
    flutterSdkPath()?.apply {
        sdkPathExists = true
        settings.extra["flutterSdkPath"] = this
        includeBuild("${this}/packages/flutter_tools/gradle")
    }
    resolutionStrategy {
        eachPlugin {
            if (requested.id.name == "flutter") {
                useModule("dev.flutter:flutter-gradle-plugin:$flutterVersion")
            }
        }
    }
    plugins {
        id("com.android.application") version (agpVersion) apply (false)
        id("com.android.library") version (agpVersion) apply (false)
        kotlin("gradle-plugin") version (kotlinVersion) apply (false)
        kotlin("android") version (kotlinVersion) apply (false)
        kotlin("kapt") version (kotlinVersion) apply (false)
        kotlin("jvm") version (kotlinVersion) apply (false)
        if (sdkPathExists) {
            id("dev.flutter.flutter-gradle-plugin") version (flutterVersion) apply false
        }
    }
}

// Load and include Flutter plugins.
val flutterProjectRoot: Path = rootProject.projectDir.parentFile.toPath()
val pluginsFile: Path = flutterProjectRoot.resolve(".flutter-plugins-dependencies")
if (!Files.exists(pluginsFile)) {
    throw GradleException("Flutter plugins file not found. Define plugins in $pluginsFile.")
}
@Suppress("UNCHECKED_CAST")
val map = JsonSlurper().parseText(
    pluginsFile.toFile().readText()
) as? Map<String, Map<String, List<Map<String, Any>>>>

val android = (map?.get("plugins")?.get("android") ?: arrayListOf())
android.forEach {
    val name = it["name"] as String
    val path = it["path"] as String
    val needsBuild: Boolean =
        if (it.containsKey("native_build")) it["native_build"] as Boolean else true
    if (!needsBuild) {
        return@forEach
    }
    val pluginDirectory = file(path).toPath().resolve("android")
    assert(pluginDirectory.exists())
    include(":$name")
    project(":$name").projectDir = pluginDirectory.toFile()
}

run gradle

./gradlew build

Expected results
gradel should show "BUILD SUCCESSFUL in 1m" message
Actual results
gradle daemon process enters infinite loop,Until the memory is completely consumed and the system crashes
Code sample
Code sample
[code in Steps to reproduce]

Screenshots or Video

Screenshots / Video demonstration
[Upload media here]

Logs
Logs

> Task :gradle:extractPluginRequests NO-SOURCE
> Task :gradle:generatePluginAdapters NO-SOURCE
> Task :gradle:compileJava NO-SOURCE
> Task :gradle:compileGroovy
> Task :gradle:compileGroovyPlugins NO-SOURCE
> Task :gradle:pluginDescriptors UP-TO-DATE
> Task :gradle:processResources UP-TO-DATE
> Task :gradle:classes
> Task :gradle:jar

> Configure project :app

Kotlin DSL property assignment is an incubating feature.
flutter.source  ../..
--W- Build Environment: AGConnect plugin version is: <IP_ADDRESS>0, Gradle version is: 8.3, Android Plugin version is: 8.3.0-alpha03
--I- there's no config file
--W- The variant: debug, There's no json file
--I- there's no config file
--W- The variant: release, There's no json file
--I- there's no config file
--W- The variant: profile, There's no json file

> Configure project :
Starting a Gradle Daemon, 1 busy and 165 stopped Daemons could not be reused, use --status for details

> Task :gradle:extractPluginRequests NO-SOURCE
> Task :gradle:generatePluginAdapters NO-SOURCE
> Task :gradle:compileJava NO-SOURCE
> Task :gradle:compileGroovy
> Task :gradle:compileGroovyPlugins NO-SOURCE
> Task :gradle:pluginDescriptors UP-TO-DATE
> Task :gradle:processResources UP-TO-DATE
> Task :gradle:classes
> Task :gradle:jar

> Configure project :app

Kotlin DSL property assignment is an incubating feature.
flutter.source  ../..
--W- Build Environment: AGConnect plugin version is: <IP_ADDRESS>0, Gradle version is: 8.3, Android Plugin version is: 8.3.0-alpha03
--I- there's no config file
--W- The variant: debug, There's no json file
--I- there's no config file
--W- The variant: release, There's no json file
--I- there's no config file
--W- The variant: profile, There's no json file

> Configure project :
Starting a Gradle Daemon, 2 busy and 165 stopped Daemons could not be reused, use --status for details

% ./gradlew build --status
No Gradle daemons are running.
    For more on this, please refer to https://docs.gradle.org/8.3/userguide/gradle_daemon.html#sec:status in the Gradle documentation.

Flutter Doctor output
Doctor output
% flutter doctor -v
[✓] Flutter (Channel stable, 3.13.4, on macOS 14.0 23A339 darwin-arm64, locale zh-Hans-CN)
    • Flutter version 3.13.4 on channel stable at /Volumes/Extra/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 367f9ea16b (29 hours ago), 2023-09-12 23:27:53 -0500
    • Engine revision 9064459a8b
    • Dart version 3.1.2
    • DevTools version 2.25.0

[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at /Volumes/extra/Android/sdk/
    • Platform android-34, build-tools 34.0.0
    • ANDROID_HOME = /Volumes/extra/Android/sdk/
    • Java binary at: /Users/vickyleu/Applications/Android Studio Iguana 2023.2.1 Canary 1.app/Contents/jbr/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 17.0.8+0-17.0.8b1000.8-10699129)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 15.0)
    • Xcode at /Applications/Xcode-beta.app/Contents/Developer
    • Build 15A5219j
    • CocoaPods version 1.12.0

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[!] Android Studio (version unknown)
    • Android Studio at /Users/vickyleu/Applications/Android Studio Iguana 2023.2.1 Canary 1.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    ✗ Unable to determine Android Studio version.
    • Java version OpenJDK Runtime Environment (build 17.0.8+0-17.0.8b1000.8-10699129)

[✓] IntelliJ IDEA Ultimate Edition (version 2023.2.1)
    • IntelliJ at /Users/vickyleu/Applications/IntelliJ IDEA Ultimate.app
    • Flutter plugin version 75.1.4
    • Dart plugin version 232.9559.10

[✓] Connected device (3 available)
    • Pixel 4 XL (mobile) • 98121FFBA0004A • android-arm64  • Android 13 (API 33)
    • macOS (desktop)     • macos          • darwin-arm64   • macOS 14.0 23A339 darwin-arm64
    • Chrome (web)        • chrome         • web-javascript • Google Chrome 117.0.5938.62
    ! Error: Browsing on the local area network for iPhone13 Pro. Ensure the device is unlocked and attached with a cable or associated with the same local area network as this Mac.
      The device must be opted into Developer Mode to connect wirelessly. (code -27)

[✓] Network resources
    • All expected network resources are available.

! Doctor found issues in 1 category.

😭
I understand why now, adding the following script will interrupt dev.flutter.flutter-gradle-plugin, causing an infinite loop.
tasks.withType {
    if (name.contains("test", ignoreCase = true)) {
        enabled = false
    }
}

Flutter running under Kotlin Gradle KTS may prompt the following message:
This app is using a deprecated version of the Android embedding. To avoid unexpected runtime failures, or future build failures, try to migrate this app to the V2 embedding. Take a look at the docs for migrating an app: https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects. The plugin 'xxx' requires your app to be migrated to the Android embedding v2. Follow the steps on the migration doc above and re-run this command.

modify the source file

 see details [~/flutter/packages/flutter_tools/lib/src/project.dart]

// Copyright 2014 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 'package:meta/meta.dart';
import 'package:xml/xml.dart';
import 'package:yaml/yaml.dart';
import '../src/convert.dart';
import 'android/android_app_link_settings.dart';
import 'android/android_builder.dart';
import 'android/gradle_utils.dart' as gradle;
import 'base/common.dart';
import 'base/error_handling_io.dart';
import 'base/file_system.dart';
import 'base/logger.dart';
import 'base/utils.dart';
import 'base/version.dart';
import 'bundle.dart' as bundle;
import 'cmake_project.dart';
import 'features.dart';
import 'flutter_manifest.dart';
import 'flutter_plugins.dart';
import 'globals.dart' as globals;
import 'platform_plugins.dart';
import 'project_validator_result.dart';
import 'reporting/reporting.dart';
import 'template.dart';
import 'xcode_project.dart';
export 'cmake_project.dart';
export 'xcode_project.dart';
/// TODO 添加扩展方法,使flutter兼容kts文件
extension _DirectoryExtension on Directory {
File buildGradleChildFile() {
final file = this.childFile('build.gradle');
if(file.existsSync()) {
return file;
}
return this.childFile('build.gradle.kts');
}
File buildGradleWithSuffixChildFile(String suffix) {
final file = this.childFile(fileSystem.path.join(suffix, 'build.gradle'));
if(file.existsSync()) {
return file;
}
return this.childFile(fileSystem.path.join(suffix, 'build.gradle.kts'));
}
}
/// Enum for each officially supported platform.
enum SupportedPlatform {
android,
ios,
linux,
macos,
web,
windows,
fuchsia,
root, // Special platform to represent the root project directory
}
class FlutterProjectFactory {
FlutterProjectFactory({
required Logger logger,
required FileSystem fileSystem,
}) : _logger = logger,
_fileSystem = fileSystem;
final Logger _logger;
final FileSystem _fileSystem;
@visibleForTesting
final Map<String, FlutterProject> projects =
<String, FlutterProject>{};
/// Returns a [FlutterProject] view of the given directory or a ToolExit error,
/// if pubspec.yaml or example/pubspec.yaml is invalid.
FlutterProject fromDirectory(Directory directory) {
return projects.putIfAbsent(directory.path, () {
final FlutterManifest manifest = FlutterProject._readManifest(
directory.childFile(bundle.defaultManifestPath).path,
logger: _logger,
fileSystem: _fileSystem,
);
final FlutterManifest exampleManifest = FlutterProject._readManifest(
FlutterProject._exampleDirectory(directory)
.childFile(bundle.defaultManifestPath)
.path,
logger: _logger,
fileSystem: _fileSystem,
);
return FlutterProject(directory, manifest, exampleManifest);
});
}
}
/// Represents the contents of a Flutter project at the specified [directory].
///
/// [FlutterManifest] information is read from pubspec.yaml and
/// example/pubspec.yaml files on construction of a [FlutterProject] instance.
/// The constructed instance carries an immutable snapshot representation of the
/// presence and content of those files. Accordingly, [FlutterProject] instances
/// should be discarded upon changes to the pubspec.yaml files, but can be
/// used across changes to other files, as no other file-level information is
/// cached.
class FlutterProject {
@visibleForTesting
FlutterProject(this.directory, this.manifest, this._exampleManifest);
/// Returns a [FlutterProject] view of the given directory or a ToolExit error,
/// if pubspec.yaml or example/pubspec.yaml is invalid.
static FlutterProject fromDirectory(Directory directory) => globals.projectFactory.fromDirectory(directory);
/// Returns a [FlutterProject] view of the current directory or a ToolExit error,
/// if pubspec.yaml or example/pubspec.yaml is invalid.
static FlutterProject current() => globals.projectFactory.fromDirectory(globals.fs.currentDirectory);
/// Create a [FlutterProject] and bypass the project caching.
@visibleForTesting
static FlutterProject fromDirectoryTest(Directory directory, [Logger? logger]) {
final FileSystem fileSystem = directory.fileSystem;
logger ??= BufferLogger.test();
final FlutterManifest manifest = FlutterProject._readManifest(
directory.childFile(bundle.defaultManifestPath).path,
logger: logger,
fileSystem: fileSystem,
);
final FlutterManifest exampleManifest = FlutterProject._readManifest(
FlutterProject._exampleDirectory(directory)
.childFile(bundle.defaultManifestPath)
.path,
logger: logger,
fileSystem: fileSystem,
);
return FlutterProject(directory, manifest, exampleManifest);
}
/// The location of this project.
final Directory directory;
/// The manifest of this project.
final FlutterManifest manifest;
/// The manifest of the example sub-project of this project.
final FlutterManifest _exampleManifest;
/// The set of organization names found in this project as
/// part of iOS product bundle identifier, Android application ID, or
/// Gradle group ID.
Future<Set> get organizationNames async {
final List candidates = [];
if (ios.existsSync()) {
  // Don't require iOS build info, this method is only
  // used during create as best-effort, use the
  // default target bundle identifier.
  try {
    final String? bundleIdentifier = await ios.productBundleIdentifier(null);
    if (bundleIdentifier != null) {
      candidates.add(bundleIdentifier);
    }
  } on ToolExit {
    // It's possible that while parsing the build info for the ios project
    // that the bundleIdentifier can't be resolve. However, we would like
    // skip parsing that id in favor of searching in other place. We can
    // consider a tool exit in this case to be non fatal for the program.
  }
}
if (android.existsSync()) {
  final String? applicationId = android.applicationId;
  final String? group = android.group;
  candidates.addAll(<String>[
    if (applicationId != null)
      applicationId,
    if (group != null)
      group,
  ]);
}
if (example.android.existsSync()) {
  final String? applicationId = example.android.applicationId;
  if (applicationId != null) {
    candidates.add(applicationId);
  }
}
if (example.ios.existsSync()) {
  final String? bundleIdentifier = await example.ios.productBundleIdentifier(null);
  if (bundleIdentifier != null) {
    candidates.add(bundleIdentifier);
  }
}
return Set<String>.of(candidates.map<String?>(_organizationNameFromPackageName).whereType<String>());

}
String? _organizationNameFromPackageName(String packageName) {
if (0 <= packageName.lastIndexOf('.')) {
return packageName.substring(0, packageName.lastIndexOf('.'));
}
return null;
}
/// The iOS sub project of this project.
late final IosProject ios = IosProject.fromFlutter(this);
/// The Android sub project of this project.
late final AndroidProject android = AndroidProject._(this);
/// The web sub project of this project.
late final WebProject web = WebProject._(this);
/// The MacOS sub project of this project.
late final MacOSProject macos = MacOSProject.fromFlutter(this);
/// The Linux sub project of this project.
late final LinuxProject linux = LinuxProject.fromFlutter(this);
/// The Windows sub project of this project.
late final WindowsProject windows = WindowsProject.fromFlutter(this);
/// The Fuchsia sub project of this project.
late final FuchsiaProject fuchsia = FuchsiaProject._(this);
/// The pubspec.yaml file of this project.
File get pubspecFile => directory.childFile('pubspec.yaml');
/// The .packages file of this project.
File get packagesFile => directory.childFile('.packages');
/// The package_config.json file of the project.
///
/// This is the replacement for .packages which contains language
/// version information.
File get packageConfigFile => directory.childDirectory('.dart_tool').childFile('package_config.json');
/// The .metadata file of this project.
File get metadataFile => directory.childFile('.metadata');
/// The .flutter-plugins file of this project.
File get flutterPluginsFile => directory.childFile('.flutter-plugins');
/// The .flutter-plugins-dependencies file of this project,
/// which contains the dependencies each plugin depends on.
File get flutterPluginsDependenciesFile => directory.childFile('.flutter-plugins-dependencies');
/// The .dart-tool directory of this project.
Directory get dartTool => directory.childDirectory('.dart_tool');
/// The directory containing the generated code for this project.
Directory get generated => directory
.absolute
.childDirectory('.dart_tool')
.childDirectory('build')
.childDirectory('generated')
.childDirectory(manifest.appName);
/// The generated Dart plugin registrant for non-web platforms.
File get dartPluginRegistrant => dartTool
.childDirectory('flutter_build')
.childFile('dart_plugin_registrant.dart');
/// The example sub-project of this project.
FlutterProject get example => FlutterProject(
_exampleDirectory(directory),
_exampleManifest,
FlutterManifest.empty(logger: globals.logger),
);
/// True if this project is a Flutter module project.
bool get isModule => manifest.isModule;
/// True if this project is a Flutter plugin project.
bool get isPlugin => manifest.isPlugin;
/// True if the Flutter project is using the AndroidX support library.
bool get usesAndroidX => manifest.usesAndroidX;
/// True if this project has an example application.
bool get hasExampleApp => _exampleDirectory(directory).existsSync();
/// Returns a list of platform names that are supported by the project.
List getSupportedPlatforms({bool includeRoot = false}) {
final List platforms = includeRoot ? [SupportedPlatform.root] : [];
if (android.existsSync()) {
platforms.add(SupportedPlatform.android);
}
if (ios.exists) {
platforms.add(SupportedPlatform.ios);
}
if (web.existsSync()) {
platforms.add(SupportedPlatform.web);
}
if (macos.existsSync()) {
platforms.add(SupportedPlatform.macos);
}
if (linux.existsSync()) {
platforms.add(SupportedPlatform.linux);
}
if (windows.existsSync()) {
platforms.add(SupportedPlatform.windows);
}
if (fuchsia.existsSync()) {
platforms.add(SupportedPlatform.fuchsia);
}
return platforms;
}
/// The directory that will contain the example if an example exists.
static Directory _exampleDirectory(Directory directory) => directory.childDirectory('example');
/// Reads and validates the pubspec.yaml file at [path], asynchronously
/// returning a [FlutterManifest] representation of the contents.
///
/// Completes with an empty [FlutterManifest], if the file does not exist.
/// Completes with a ToolExit on validation error.
static FlutterManifest _readManifest(String path, {
required Logger logger,
required FileSystem fileSystem,
}) {
FlutterManifest? manifest;
try {
manifest = FlutterManifest.createFromPath(
path,
logger: logger,
fileSystem: fileSystem,
);
} on YamlException catch (e) {
logger.printStatus('Error detected in pubspec.yaml:', emphasis: true);
logger.printError('$e');
} on FormatException catch (e) {
logger.printError('Error detected while parsing pubspec.yaml:', emphasis: true);
logger.printError('$e');
} on FileSystemException catch (e) {
logger.printError('Error detected while reading pubspec.yaml:', emphasis: true);
logger.printError('$e');
}
if (manifest == null) {
throwToolExit('Please correct the pubspec.yaml file at $path');
}
return manifest;
}
/// Reapplies template files and regenerates project files and plugin
/// registrants for app and module projects only.
///
/// Will not create project platform directories if they do not already exist.
Future regeneratePlatformSpecificTooling({DeprecationBehavior deprecationBehavior = DeprecationBehavior.none}) async {
return ensureReadyForPlatformSpecificTooling(
androidPlatform: android.existsSync(),
iosPlatform: ios.existsSync(),
// TODO(stuartmorgan): Revisit the conditions here once the plans for handling
// desktop in existing projects are in place.
linuxPlatform: featureFlags.isLinuxEnabled && linux.existsSync(),
macOSPlatform: featureFlags.isMacOSEnabled && macos.existsSync(),
windowsPlatform: featureFlags.isWindowsEnabled && windows.existsSync(),
webPlatform: featureFlags.isWebEnabled && web.existsSync(),
deprecationBehavior: deprecationBehavior,
);
}
/// Applies template files and generates project files and plugin
/// registrants for app and module projects only for the specified platforms.
Future ensureReadyForPlatformSpecificTooling({
bool androidPlatform = false,
bool iosPlatform = false,
bool linuxPlatform = false,
bool macOSPlatform = false,
bool windowsPlatform = false,
bool webPlatform = false,
DeprecationBehavior deprecationBehavior = DeprecationBehavior.none,
}) async {
if (!directory.existsSync() || isPlugin) {
return;
}
await refreshPluginsList(this, iosPlatform: iosPlatform, macOSPlatform: macOSPlatform);
if (androidPlatform) {
await android.ensureReadyForPlatformSpecificTooling(deprecationBehavior: deprecationBehavior);
}
if (iosPlatform) {
await ios.ensureReadyForPlatformSpecificTooling();
}
if (linuxPlatform) {
await linux.ensureReadyForPlatformSpecificTooling();
}
if (macOSPlatform) {
await macos.ensureReadyForPlatformSpecificTooling();
}
if (windowsPlatform) {
await windows.ensureReadyForPlatformSpecificTooling();
}
if (webPlatform) {
await web.ensureReadyForPlatformSpecificTooling();
}
await injectPlugins(
this,
androidPlatform: androidPlatform,
iosPlatform: iosPlatform,
linuxPlatform: linuxPlatform,
macOSPlatform: macOSPlatform,
windowsPlatform: windowsPlatform,
);
}
void checkForDeprecation({DeprecationBehavior deprecationBehavior = DeprecationBehavior.none}) {
if (android.existsSync() && pubspecFile.existsSync()) {
android.checkForDeprecation(deprecationBehavior: deprecationBehavior);
}
}
/// Returns a json encoded string containing the [appName], [version], and [buildNumber] that is used to generate version.json
String getVersionInfo()  {
final String? buildName = manifest.buildName;
final String? buildNumber = manifest.buildNumber;
final Map<String, String> versionFileJson = <String, String>{
'app_name': manifest.appName,
if (buildName != null)
'version': buildName,
if (buildNumber != null)
'build_number': buildNumber,
'package_name': manifest.appName,
};
return jsonEncode(versionFileJson);
}
}
/// Base class for projects per platform.
abstract class FlutterProjectPlatform {
/// Plugin's platform config key, e.g., "macos", "ios".
String get pluginConfigKey;
/// Whether the platform exists in the project.
bool existsSync();
}
/// Represents the Android sub-project of a Flutter project.
///
/// Instances will reflect the contents of the android/ sub-folder of
/// Flutter applications and the .android/ sub-folder of Flutter module projects.
class AndroidProject extends FlutterProjectPlatform {
AndroidProject._(this.parent);
// User facing string when java/gradle/agp versions are compatible.
@visibleForTesting
static const String validJavaGradleAgpString = 'compatible java/gradle/agp';
// User facing link that describes compatibility between gradle and
// android gradle plugin.
static const String gradleAgpCompatUrl =
'https://developer.android.com/studio/releases/gradle-plugin#updating-gradle';
// User facing link that describes compatibility between java and the first
// version of gradle to support it.
static const String javaGradleCompatUrl =
'https://docs.gradle.org/current/userguide/compatibility.html#java';
/// The parent of this project.
final FlutterProject parent;
@override
String get pluginConfigKey => AndroidPlugin.kConfigKey;
static final RegExp _androidNamespacePattern = RegExp('android {[\S\s]+namespace[\s]+'"['"]');
static final RegExp _applicationIdPattern = RegExp('^\sapplicationId\s+'"['"]\s$');
static final RegExp _imperativeKotlinPluginPattern = RegExp('^\sapply plugin\:\s+['"]kotlin-android['"]\s$');
static final RegExp _declarativeKotlinPluginPattern = RegExp('^\sid\s+['"]kotlin-android['"]\s$');
static final RegExp _groupPattern = RegExp('^\sgroup\s+'"['"]\s$');
/// The Gradle root directory of the Android host app. This is the directory
/// containing the app/ subdirectory and the settings.gradle file that
/// includes it in the overall Gradle project.
Directory get hostAppGradleRoot {
if (!isModule || _editableHostAppDirectory.existsSync()) {
return _editableHostAppDirectory;
}
return ephemeralDirectory;
}
/// The Gradle root directory of the Android wrapping of Flutter and plugins.
/// This is the same as [hostAppGradleRoot] except when the project is
/// a Flutter module with an editable host app.
Directory get _flutterLibGradleRoot => isModule ? ephemeralDirectory : _editableHostAppDirectory;
Directory get ephemeralDirectory => parent.directory.childDirectory('.android');
Directory get _editableHostAppDirectory => parent.directory.childDirectory('android');
/// True if the parent Flutter project is a module.
bool get isModule => parent.isModule;
/// True if the parent Flutter project is a plugin.
bool get isPlugin => parent.isPlugin;
/// True if the Flutter project is using the AndroidX support library.
bool get usesAndroidX => parent.usesAndroidX;
/// Returns true if the current version of the Gradle plugin is supported.
late final bool isSupportedVersion = _computeSupportedVersion();
/// Gets all build variants of this project.
Future<List> getBuildVariants() async {
if (!existsSync() || androidBuilder == null) {
return const [];
}
return androidBuilder!.getBuildVariants(project: parent);
}
/// Returns app link related project settings for a given build variant.
///
/// Use [getBuildVariants] to get all of the available build variants.
Future getAppLinksSettings({required String variant}) async {
if (!existsSync() || androidBuilder == null) {
return const AndroidAppLinkSettings(
applicationId: '',
domains: [],
);
}
return AndroidAppLinkSettings(
applicationId: await androidBuilder!.getApplicationIdForVariant(variant, project: parent),
domains: await androidBuilder!.getAppLinkDomainsForVariant(variant, project: parent),
);
}
bool _computeSupportedVersion() {
final FileSystem fileSystem = hostAppGradleRoot.fileSystem;
final File plugin = hostAppGradleRoot.childFile(
fileSystem.path.join('buildSrc', 'src', 'main', 'groovy', 'FlutterPlugin.groovy'));
if (plugin.existsSync()) {
return false;
}
final File appGradle = hostAppGradleRoot.buildGradleWithSuffixChildFile('app');
if (!appGradle.existsSync()) {
return false;
}
for (final String line in appGradle.readAsLinesSync()) {
final bool fileBasedApply = line.contains(RegExp(r'apply from: .*/flutter.gradle'));
final bool declarativeApply = line.contains('dev.flutter.flutter-gradle-plugin');
final bool managed = line.contains("def flutterPluginVersion = 'managed'");
if (fileBasedApply || declarativeApply || managed) {
return true;
}
}
return false;
}
/// True, if the app project is using Kotlin.
bool get isKotlin {
final File gradleFile = hostAppGradleRoot.childDirectory('app').buildGradleChildFile();
final bool imperativeMatch = firstMatchInFile(gradleFile, _imperativeKotlinPluginPattern) != null;
final bool declarativeMatch = firstMatchInFile(gradleFile, _declarativeKotlinPluginPattern) != null;
return imperativeMatch || declarativeMatch;
}
File get appManifestFile {
if (isUsingGradle) {
return hostAppGradleRoot
.childDirectory('app')
.childDirectory('src')
.childDirectory('main')
.childFile('AndroidManifest.xml');
}
return hostAppGradleRoot.childFile('AndroidManifest.xml');

}
File get gradleAppOutV1File => gradleAppOutV1Directory.childFile('app-debug.apk');
Directory get gradleAppOutV1Directory {
return globals.fs.directory(globals.fs.path.join(hostAppGradleRoot.path, 'app', 'build', 'outputs', 'apk'));
}
/// Whether the current flutter project has an Android sub-project.
@override
bool existsSync() {
return parent.isModule || _editableHostAppDirectory.existsSync();
}
/// Check if the versions of Java, Gradle and AGP are compatible.
///
/// This is expected to be called from
/// flutter_tools/lib/src/project_validator.dart.
Future validateJavaGradleAgpVersions() async {
// Constructing ProjectValidatorResult happens here and not in
// flutter_tools/lib/src/project_validator.dart because of the additional
// Complexity of variable status values and error string formatting.
const String visibleName = 'Java/Gradle/Android Gradle Plugin';
final CompatibilityResult validJavaGradleAgpVersions =
await hasValidJavaGradleAgpVersions();
return ProjectValidatorResult(
  name: visibleName,
  value: validJavaGradleAgpVersions.description,
  status: validJavaGradleAgpVersions.success
      ? StatusProjectValidator.success
      : StatusProjectValidator.error,
);

}
/// Ensures Java SDK is compatible with the project's Gradle version and
/// the project's Gradle version is compatible with the AGP version used
/// in build.gradle.
Future hasValidJavaGradleAgpVersions() async {
final String? gradleVersion = await gradle.getGradleVersion(
hostAppGradleRoot, globals.logger, globals.processManager);
final String? agpVersion =
gradle.getAgpVersion(hostAppGradleRoot, globals.logger);
final String? javaVersion = _versionToParsableString(globals.java?.version);
// Assume valid configuration.
String description = validJavaGradleAgpString;

final bool compatibleGradleAgp = gradle.validateGradleAndAgp(globals.logger,
    gradleV: gradleVersion, agpV: agpVersion);

final bool compatibleJavaGradle = gradle.validateJavaGradle(globals.logger,
    javaV: javaVersion, gradleV: gradleVersion);

// Begin description formatting.
if (!compatibleGradleAgp) {
  description = '''

Incompatible Gradle/AGP versions. \n
Gradle Version: $gradleVersion, AGP Version: $agpVersion
Update Gradle to at least "${gradle.getGradleVersionFor(agpVersion!)}".\n
See the link below for more information:
$gradleAgpCompatUrl
''';
}
if (!compatibleJavaGradle) {
// Should contain the agp error (if present) but not the valid String.
description = '''
${compatibleGradleAgp ? '' : description}
Incompatible Java/Gradle versions.
Java Version: $javaVersion, Gradle Version: $gradleVersion\n
See the link below for more information:
$javaGradleCompatUrl
''';
}
return CompatibilityResult(
compatibleJavaGradle && compatibleGradleAgp, description);
}
bool get isUsingGradle {
return
hostAppGradleRoot.buildGradleChildFile().existsSync();
;
}
String? get applicationId {
final File gradleFile = hostAppGradleRoot.childDirectory('app').buildGradleChildFile();
return firstMatchInFile(gradleFile, _applicationIdPattern)?.group(1);
}
/// Get the namespace for newer Android projects,
/// which replaces the package attribute in the Manifest.xml.
String? get namespace {
final File gradleFile = hostAppGradleRoot.childDirectory('app').buildGradleChildFile();
if (!gradleFile.existsSync()) {
  return null;
}

// firstMatchInFile() reads per line but `_androidNamespacePattern` matches a multiline pattern.
return _androidNamespacePattern.firstMatch(gradleFile.readAsStringSync())?.group(1);

}
String? get group {
final File gradleFile = hostAppGradleRoot.buildGradleChildFile();
return firstMatchInFile(gradleFile, _groupPattern)?.group(1);
}
/// The build directory where the Android artifacts are placed.
Directory get buildDirectory {
return parent.directory.childDirectory('build');
}
Future ensureReadyForPlatformSpecificTooling({DeprecationBehavior deprecationBehavior = DeprecationBehavior.none}) async {
if (isModule && _shouldRegenerateFromTemplate()) {
await _regenerateLibrary();
// Add ephemeral host app, if an editable host app does not already exist.
if (!_editableHostAppDirectory.existsSync()) {
await _overwriteFromTemplate(globals.fs.path.join('module', 'android', 'host_app_common'), ephemeralDirectory);
await _overwriteFromTemplate(globals.fs.path.join('module', 'android', 'host_app_ephemeral'), ephemeralDirectory);
}
}
if (!hostAppGradleRoot.existsSync()) {
return;
}
gradle.updateLocalProperties(project: parent, requireAndroidSdk: false);
}
bool _shouldRegenerateFromTemplate() {
return globals.fsUtils.isOlderThanReference(
entity: ephemeralDirectory,
referenceFile: parent.pubspecFile,
) || globals.cache.isOlderThanToolsStamp(ephemeralDirectory);
}
File get localPropertiesFile => _flutterLibGradleRoot.childFile('local.properties');
Directory get pluginRegistrantHost => _flutterLibGradleRoot.childDirectory(isModule ? 'Flutter' : 'app');
Future _regenerateLibrary() async {
ErrorHandlingFileSystem.deleteIfExists(ephemeralDirectory, recursive: true);
await _overwriteFromTemplate(
globals.fs.path.join(
'module',
'android',
'library_new_embedding',
),
ephemeralDirectory);
await _overwriteFromTemplate(globals.fs.path.join(
'module',
'android',
'gradle'), ephemeralDirectory);
globals.gradleUtils?.injectGradleWrapperIfNeeded(ephemeralDirectory);
}
Future _overwriteFromTemplate(String path, Directory target) async {
final Template template = await Template.fromName(
path,
fileSystem: globals.fs,
templateManifest: null,
logger: globals.logger,
templateRenderer: globals.templateRenderer,
);
final String androidIdentifier = parent.manifest.androidPackage ?? 'com.example.${parent.manifest.appName}';
template.render(
target,
<String, Object>{
'android': true,
'projectName': parent.manifest.appName,
'androidIdentifier': androidIdentifier,
'androidX': usesAndroidX,
'agpVersion': gradle.templateAndroidGradlePluginVersion,
'kotlinVersion': gradle.templateKotlinGradlePluginVersion,
'gradleVersion': gradle.templateDefaultGradleVersion,
'gradleVersionForModule': gradle.templateDefaultGradleVersionForModule,
'compileSdkVersion': gradle.compileSdkVersion,
'minSdkVersion': gradle.minSdkVersion,
'ndkVersion': gradle.ndkVersion,
'targetSdkVersion': gradle.targetSdkVersion,
},
printStatusWhenWriting: false,
);
}
void checkForDeprecation({DeprecationBehavior deprecationBehavior = DeprecationBehavior.none}) {
if (deprecationBehavior == DeprecationBehavior.none) {
return;
}
final AndroidEmbeddingVersionResult result = computeEmbeddingVersion();
if (result.version != AndroidEmbeddingVersion.v1) {
return;
}
globals.printStatus(
'''
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Warning
──────────────────────────────────────────────────────────────────────────────
Your Flutter application is created using an older version of the Android
embedding. It is being deprecated in favor of Android embedding v2. To migrate
your project, follow the steps at:
https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The detected reason was:
${result.reason}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
''');
if (deprecationBehavior == DeprecationBehavior.ignore) {
BuildEvent('deprecated-v1-android-embedding-ignored', type: 'gradle', flutterUsage: globals.flutterUsage).send();
} else { // DeprecationBehavior.exit
BuildEvent('deprecated-v1-android-embedding-failed', type: 'gradle', flutterUsage: globals.flutterUsage).send();
throwToolExit(
'Build failed due to use of deprecated Android v1 embedding.',
exitCode: 1,
);
}
}
AndroidEmbeddingVersion getEmbeddingVersion() {
return computeEmbeddingVersion().version;
}
AndroidEmbeddingVersionResult computeEmbeddingVersion() {
if (isModule) {
// A module type's Android project is used in add-to-app scenarios and
// only supports the V2 embedding.
return AndroidEmbeddingVersionResult(AndroidEmbeddingVersion.v2, 'Is add-to-app module');
}
if (isPlugin) {
// Plugins do not use an appManifest, so we stop here.
//
// TODO(garyq): This method does not currently check for code references to
// the v1 embedding, we should check for this once removal is further along.
return AndroidEmbeddingVersionResult(AndroidEmbeddingVersion.v2, 'Is plugin');
}
if (!appManifestFile.existsSync()) {
return AndroidEmbeddingVersionResult(AndroidEmbeddingVersion.v1, 'No ${appManifestFile.absolute.path} file');
}
XmlDocument document;
try {
document = XmlDocument.parse(appManifestFile.readAsStringSync());
} on XmlException {
throwToolExit('Error parsing $appManifestFile '
'Please ensure that the android manifest is a valid XML document and try again.');
} on FileSystemException {
throwToolExit('Error reading $appManifestFile even though it exists. '
'Please ensure that you have read permission to this file and try again.');
}
for (final XmlElement application in document.findAllElements('application')) {
final String? applicationName = application.getAttribute('android:name');
if (applicationName == 'io.flutter.app.FlutterApplication') {
return AndroidEmbeddingVersionResult(AndroidEmbeddingVersion.v1, '${appManifestFile.absolute.path} uses android:name="io.flutter.app.FlutterApplication"');
}
}
for (final XmlElement metaData in document.findAllElements('meta-data')) {
final String? name = metaData.getAttribute('android:name');
if (name == 'flutterEmbedding') {
final String? embeddingVersionString = metaData.getAttribute('android:value');
if (embeddingVersionString == '1') {
return AndroidEmbeddingVersionResult(AndroidEmbeddingVersion.v1, '${appManifestFile.absolute.path} <meta-data android:name="flutterEmbedding" has value 1');
}
if (embeddingVersionString == '2') {
return AndroidEmbeddingVersionResult(AndroidEmbeddingVersion.v2, '${appManifestFile.absolute.path} <meta-data android:name="flutterEmbedding" has value 2');
}
}
}
return AndroidEmbeddingVersionResult(AndroidEmbeddingVersion.v1, 'No <meta-data android:name="flutterEmbedding" android:value="2"/> in ${appManifestFile.absolute.path}');
}
}
/// Iteration of the embedding Java API in the engine used by the Android project.
enum AndroidEmbeddingVersion {
/// V1 APIs based on io.flutter.app.FlutterActivity.
v1,
/// V2 APIs based on io.flutter.embedding.android.FlutterActivity.
v2,
}
/// Data class that holds the results of checking for embedding version.
///
/// This class includes the reason why a particular embedding was selected.
class AndroidEmbeddingVersionResult {
AndroidEmbeddingVersionResult(this.version, this.reason);
/// The embedding version.
AndroidEmbeddingVersion version;
/// The reason why the embedding version was selected.
String reason;
}
// What the tool should do when encountering deprecated API in applications.
enum DeprecationBehavior {
// The command being run does not care about deprecation status.
none,
// The command should continue and ignore the deprecation warning.
ignore,
// The command should exit the tool.
exit,
}
/// Represents the web sub-project of a Flutter project.
class WebProject extends FlutterProjectPlatform {
WebProject._(this.parent);
final FlutterProject parent;
@override
String get pluginConfigKey => WebPlugin.kConfigKey;
/// Whether this flutter project has a web sub-project.
@override
bool existsSync() {
return parent.directory.childDirectory('web').existsSync()
&& indexFile.existsSync();
}
/// The 'lib' directory for the application.
Directory get libDirectory => parent.directory.childDirectory('lib');
/// The directory containing additional files for the application.
Directory get directory => parent.directory.childDirectory('web');
/// The html file used to host the flutter web application.
File get indexFile => parent.directory
.childDirectory('web')
.childFile('index.html');
/// The .dart_tool/dartpad directory
Directory get dartpadToolDirectory => parent.directory
.childDirectory('.dart_tool')
.childDirectory('dartpad');
Future ensureReadyForPlatformSpecificTooling() async {
/// Create .dart_tool/dartpad/web_plugin_registrant.dart.
/// See: https://github.com/dart-lang/dart-services/pull/874
await injectBuildTimePluginFiles(
parent,
destination: dartpadToolDirectory,
webPlatform: true,
);
}
}
/// The Fuchsia sub project.
class FuchsiaProject {
FuchsiaProject._(this.project);
final FlutterProject project;
Directory? _editableHostAppDirectory;
Directory get editableHostAppDirectory =>
_editableHostAppDirectory ??= project.directory.childDirectory('fuchsia');
bool existsSync() => editableHostAppDirectory.existsSync();
Directory? _meta;
Directory get meta =>
_meta ??= editableHostAppDirectory.childDirectory('meta');
}
// Combines success and a description into one object that can be returned
// together.
@visibleForTesting
class CompatibilityResult {
CompatibilityResult(this.success, this.description);
final bool success;
final String description;
}
/// Converts a [Version] to a string that can be parsed by [Version.parse].
String? _versionToParsableString(Version? version) {
if (version == null) {
return null;
}
return '${version.major}.${version.minor}.${version.patch}';
}

rebuild flutter tool and run pub
rm ~/flutter/bin/cache/flutter_tools.stamp & \
rm ~/flutter/bin/cache/flutter_tools.snapshot & \
flutter pub get

@xcc3641
This is an issue from several years ago, and it's surprising that no one has addressed it in four years.

Hi @vickyleu
The issue you mentioned above is re-opened as a new one at https://github.com/flutter/flutter/issues/93238. You might want to follow a similar issue as well: https://github.com/flutter/flutter/issues/121541.
Since it's not supported yet, I will close this issue in favor of those issues. Please follow up on them for further updates. You can leave your comment there or react an upvote to the original comment will help to raise the issue. Thank you!


[Edge Case] Payment Rejection in Metamask while Upload

While we upload a file it sends a request to pay the gas fee to store the user details and then upload details but if the user clicks on reject then it should be handled so for that we need to handle an alert to state please try again and stating a proper reason.

As a part of the retrospective week, I am working on this issue @imabp @Sameerkash

If the issue hasn't been resolved yet, can I have the opportunity to try?


PR: Skip a test in our pip slots because it's hanging

Description of Changes
Oddly, that test started to hang in our test suite since yesterday.
Affirmation
By submitting this Pull Request or typing my (user)name below,
I affirm the Developer Certificate of Origin
with respect to all commits and content included in this PR,
and understand I am releasing the same under Spyder's MIT (Expat) license.

I certify the above statement is true and correct: @ccordoba12

Hello @ccordoba12! Thanks for opening this PR. We checked the lines you've touched for PEP 8 issues, and found:

In the file spyder/app/tests/test_mainwindow.py:

Line 699:80: E501 line too long (82 > 79 characters)


PF-2060: Re-enable test

Currently the tests are failing but they are not failing due to broken notebooks.


Add gogi for gitignore client

I write a simple gitignore client in Go https://github.com/Gnouc/gogi
It should be run on most OS, which support Go.
Would you mind adding gogi link to README.md?

THIS IS AWESOME! Yeah, I'll add it in there tomorrow.  I need to re-work the README.md a little bit, but this is awesome!
Thanks for doing this.

@joeblau If you don't mind, I can make the PR :smile:

Sure if you want that works.

@joeblau Sure, see https://github.com/joeblau/gitignore.io/pull/225

It's live: https://www.gitignore.io/docs


ASA GUI Rework

Updates ASA Blazor GUI with (mostly) standards compliant CSS styles by utilizing Bootstrap more effectively. There is still some work in progress, so keeping this PR in draft mode for a bit longer.
Other notes:

Adds Monitor page
Removes OAT Components package dep

Also contains fixes for bugs discovered in the testing process, which currently includes:

AnalysesHash SQlite insert bug when a run is completed and results are being stored
Displaying results caused error in Report page
Fix #574

@gfs I patched a couple DB insert methods to fix the AnalysesHash bug, but not sure if the approach I took is the most flexible. Check out 8f2cb4bf9355f4b2e03a7865cdc88ba04a909806 when you get a chance.

It looks like it’s not building properly in the pipeline. Do you need me to take a look @daalcant ?

Opened #573 which is currently blocking some style changes. Work will continue on Results in the meantime.

Opened #574 which should be completed with ASA 2.3 as well

Superceded by #578.


fix: fix test setup.sh debug fetchmail on wildcard domains

on hosts that belong to wildcard domains pop3.example.com might
actually resolve to pop3.example.com.[mydomain.com] and give a valid ip
the return code of fetchmail then no longer is 11 (dns failure) but
something else (2 for socket error in our case)
to make sure we always get return code 11 we use the domain name
pop3.example.com. that is not allowed to be resolved to a subdomain.
Info @wt-io-it

Looks good, thanks.


HTTP payloads get modified by Function when content-type is application/json

From @asavaritayal on December 11, 2018 6:39
From @brettcannon on December 10, 2018 19:46

Investigative information
Please provide the following:

Timestamp :2018-11-28 20:25:05.885
Function App name: pvscbot
Function name(s) (as appropriate): github

Repro steps
POST an application/json HTTP payload with a body of b'{"action": "opened"}'.
Expected behavior
Get the exact HTTP payload in the Function.
Actual behavior
Get a POST payload of b'{\n  "action": "opened"\n}' (notice the pretty-printing).
Known workarounds
None.
Related information
This pretty-printing of JSON breaks HTTP payload signatures. In my specific case, this breaks the HMAC signature provided by GitHub webhooks. This is critical as it prevents malicious users from trying to force a bot to do something it shouldn't (as bots typically have write access and can do things like commit and deploy code). It also breaks checking for any man-in-the-middle attacks by verifying the signature against the HTTP payload.
You could theoretically add a key as a GET parameter, but then that exposes the shared secret in logs (compared to an HMAC signature which pulls a secret from an environment variable that Key Vault stores on the Function's behalf), so that is not a tenable solution when security is the aim here.
Copied from original issue: Azure/azure-functions-python-worker#260
Copied from original issue: Azure/azure-functions-host#3875

From @elprans on December 10, 2018 20:4
I'm pretty sure this is a host issue.  The worker passes the body exactly as received from the host:
https://github.com/Azure/azure-functions-python-worker/blob/e03026773f57145530224ab3a918e321a2c3efb9/azure/functions_worker/bindings/http.py#L129-L131

From @brettcannon on December 10, 2018 20:18
@elprans I actually know that it is a host issue, but @asavaritayal told me to file it here for tracking purposes  (along with all of the other issues I filed today).

From @fabiocav on January 7, 2019 19:24
@mhoeger; moving this to sprint 40 for investigation. Feel free to reassign if a different sprint would be more appropriate.

From @fabiocav on December 12, 2018 22:49
Assigning this to sprint 39 for investigation.

From @mhoeger on January 17, 2019 22:26
@asavaritayal and @elprans - the host gives this information as rawBody in the RpcHttp protobuf message. In the node worker, we surface this as req.rawBody.
I think the fix here is for the python worker to either make a breaking change and always surface rawBody/ignore body (magic done to "body" is in RpcMessageExtensions here), or add something like rawBody to the python http object.
cc: @maiqbal11

I think rawBody should actually be the default. With the pretty printing in the current HTTP request  body, other fields such as Content-Length become inaccurate as well, leaving the users to decipher these fields all over from the raw input.
Adding a few others to ack in case there is v1 history here :) @fabiocav @mathewc @pragnagopa
/cc @maiqbal11

From @mhoeger on February 1, 2019 1:9
@asavaritayal - for other languages, we can't change the behavior (since it's a breaking change). For python, you probably could, although I'm also not sure if there were other reasons for pretty-ing the body that the people you tagged earlier would know :)


Add TypeScript bindings

TypeScript bindings would enable TypeScript developers to consume this package and leverage a fully typed API. Since these are just bindings, no actual code changes are required.
I have already created these bindings here: marklogic-node-typescript-definitions.
I did so by essentially extracting the jsdoc from the code. Subsequently, maintenance of these definition files would be reduced to similarly ensuring any jsdoc updates are reflected in the definition files themselves.
If there is interest, I can create a pull request for these definition files for easy consumption.

Thanks, Christy, for the concrete proposal.
If I understand correctly (ignorant of TypeScript here), the TypeScript interface declarations could be backed by the JavaScript implementations and thus TypeScript use of the API could coexist with direct JavaScript use of the API.
If so, the main downside would be the extra cost of maintaining the TypeScript interface declarations and especially the duplication of jsdoc. On the other hand, defining a formally typed interface would be a solid design practice.
One related factor to consider is the potential impact of ES6 features on the design of the Node.js API with the upgrade to Node.js 4. If ES6 suggests enhancements to the design, maybe the time to add a TypeScript interface is after the refresh.
I'm queuing this issue up for Justin to consider from the PM perspective.

As a developer using Typescript, I am most grateful for the MarkLogic types definitions. Thanks Christy!

Will not be working on this.


Issuing credits to Gisele

Issue 1000 credits to @giselechou.

 Follow up
On Wednesday, 27-Mar-24 13:19:26 UTC by Gov4Git dev
Issued 1000 credits to member @giselechou.


Fixed LIO-SAM link

Fixed a small typo https://github.com/TixiaoShan/LIO-SAM

Hey @horverno
thanks for cleaning the list.


m6web/firewall is abandoned

This package depends on m6web/firewall, which has recently been abandoned.

I just did a quick search on packagist but found nothing useful for direct filtering. However, there are a lot of libraries for handling IP addresses which can match an address against a network range.

That could help. Unfortunately, I don't have many free time to update this repository right now. If you're interesting in working on that, feel free to make a pull request.


refactor: removed the unnecessary useState() hook and onMouseEnter() …

Description
Removed redundant useState() hook and event handlers for hover effects.
Fixes #3413

Summary by CodeRabbit

Refactor

Simplified hover effects for social media icons by removing local state management and utilizing CSS classes instead.
Updated import statements to reflect the removal of unused state management functionality.

/ptal

closing this one as someone else has created a PR for this
https://github.com/asyncapi/website/pull/3419


add vikings token

I agree to not ping anybody on Discord/Twitter/email about this pull request. Instead I will inquire by posting a new comment in the pull request if needed.

PRs are reviewed in bulk and and can take up to two weeks to be merged.
This repository is managed using an auto merge action. Please ensure your PR has no deleted lines, and it will be merged.
Please provide the following information for your token.
Please include change to the src/tokens/solana.tokenlist.json file in the PR.
DON'T modify any other token on the list.
At minimum each entry should have

Token Address:
Token Name:
Token Symbol:
Logo: (logo should be uploaded under assets/mainnet//*.<png/svg>)
Link to the official homepage of token:
Coingecko ID if available (https://www.coingecko.com/api/documentations/v3#/coins/get_coins__id_):

Nice to see your token Merged. I am trying to achieve this but it is stopping after 5 checks passed. Please help if you have followed any specific process.


Translator

🛠 Fixes Issue
Closes #219
👨💻 Changes proposed

✔ Check List (Check all the applicable boxes)

[x] My code follows the code style of this project.
[x] This PR does not contain plagiarized content.
[x] The title of my pull request is a short description of the requested changes.

📄 Note to reviewers
This extension calls a web service that translates a language
📷 Screenshots

demo:
https://user-images.githubusercontent.com/49890655/166190926-975b4792-32f2-4ce8-859d-0161e3c2de43.mp4


[Bug] Only Insertion or Deletion case

insertion 또는 deletion만 존재하는 경우가 있음
1 file changed, 1 insertion(+)
1 file changed, 1 deletion(-)

Solve the problem in here 316485b00841a615db58ca46aa778ccd6b85ae8c

Solve the problem in here https://github.com/geongupark/readability-checker/commit/316485b00841a615db58ca46aa778ccd6b85ae8c


Error during training step

I get an error during the training step:
Training...

HttpOperationError                        Traceback (most recent call last)
<ipython-input-10-7fbb621e52f5> in <module>()
2
3 print ("Training...")
----> 4 iteration = trainer.train_project(project.id)
5 while (iteration.status != "Completed"):
6     iteration = trainer.get_iteration(project.id, iteration.id)
C:\anaconda3\lib\site-packages\azure\cognitiveservices\vision\customvision\training\training_api.py in train_project(self, project_id, custom_headers, raw, **operation_config)
1427
1428         if response.status_code not in [200]:
-> 1429             raise HttpOperationError(self._deserialize, response)
1430
1431         deserialized = None
HttpOperationError: Operation returned an invalid status code 'Bad Request'

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 646cbb8a-041e-9d99-0385-272f31793552
Version Independent ID: b9ae4376-2e8f-f311-8b1b-d4e3120bf5b5
Content: Create a Custom Vision Service Python tutorial - Azure Cognitive Services
Content Source: articles/cognitive-services/Custom-Vision-Service/python-tutorial.md
Service: cognitive-services
GitHub Login: @areddish
Microsoft Alias: areddish

@fhe-fr Thanks for the feedback. We are actively investigating and will get back to you soon.

The problem was resolved. We should have at least 5 images in each category.

Hi, guys. I was same problem.
If you upload pictures from your computer (local), you may get 400 errors. I do not know why. I tried to download the photos from github by creating a repository on github.com and downloading them from Azure.
https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/python-tutorial#upload-images-to-the-project
It is recommended that you modify the uncommented code in this section.
If there is anything that does not make sense, let me know.
In fact, I do not understand English well, so I translate it into Google Translator and answer it. 😅

Hi fhe-fr
I also found this error
msrest.exceptions.HttpOperationError: Operation returned an invalid status code 'Bad Request' in training step. How do you solve it?Let me know.

Can you please help i am having the same problem and there seems to be no hope in solving this one

Can you please help i am having the same problem and there seems to be no hope in solving this one

In adding image stage, do you add photo in the tags?
The code create the tags but doesn't add any in the tags. If your adding image stage is ok, i want to know.


Should releases using node-zwave-js 8.9.0betaX really be marked "stable"?

I'm not sure that packaging the beta releases of the driver as "stable" is correct (e.g. the official HA addon gets tagged from the latest no-pre-release of zwavejs2mqtt).

@mundschenk-at That has been a mistake on my side, the automated release action didn't picked the beta tag correctly


The predicted future motion

Hi,
I saw that you predict the future 3d human poses in the current frame's camera coordinate. My question is that the predicted future 3D motion results shown in your paper are in the world coordinate, so we need additional camera future positions to transform this coordinate system. Actually, this transformation matrix or camera position information is unavailable for your method in practice. Hence, how can your method predict these future human motion in the 3D scene?

Hi,
The 2D to 3D motion prediction was introduced by [1]. The authors designed the problem to be:

Input: 2D skeleton in world frame; you will find that we normalize the world frame coordinates in our training code.
Output: 3D skeleton in camera frame for both training and validation. This was used following the authors of [1]. This also allowed us to compare our results with prior approaches reported in our paper.

Thus, the visualizations you see in figures 4 & 5 are in camera frame. While the visualization you see in figure 1 is in world frame., and this is more of an art than a result.  The camera parameters can be found in the original dataset files for both GTA-IM and PROX in case you needed to do the 3D visualization in the world frame. Other than this, using the visualization script in our repo will allow you directly to visualize in the camera frame generating the same figures as figures 4&5.
[1] Cao, Zhe, Hang Gao, Karttikeya Mangalam, Qi-Zhi Cai, Minh Vo, and Jitendra Malik. "Long-term human motion prediction with scene context." In European Conference on Computer Vision, pp. 387-404. Springer, Cham, 2020.


Add magnetic flux Phi to history

Here I add the magnetic flux Phi to the output. Below shows the unnormalized and normalized magnetic flux. The scales seem okay but it's hard for me to compare directly to the plots in the EHT code comparison paper because they do 3D and the dynamics are a bit different. Thoughts?

[ ] Adds a test for any bugs fixed. Adds tests for new features.
[x] Format your changes by calling scripts/bash/format.sh.
[x] Explain what you did.

I've changed the Phi integrand to be Bp[0] * gdet (so Bp[0] / lapse * (lapse * detgamma)). This is how the unnormalized Phi looks now.. Still quite different from nublight?

After #153 we have the following Phi, Phi/sqrt(mdot), and mdot.

That looks much better!


Add SJJB map icons

Please, add SJJB map icons from http://www.sjjb.co.uk/mapicons/contactsheet Note, these are also used by OpenStreetMap

PS The project is not dead, only that particular repo is.

I've been trying to convert this icons, but the SVG code is basically unusable without previous work. It could be used as an Inkscape editable, but not as an SVG icon. It will take ages to convert them to symbols manually.
Basically, each icon has multiple stacked paths and shapes. Most of them could be converted to a single path.
If someone has the time to convert the symbols, I'll be happy to mentorize or help in the conversion.

@Xaviju:

There are some three-color icons in the set. What should be done with those? (use opacity to get the third color?)
Should all paths of the same color in an icon be unioned?
Stroke to path is probably fine for most cases, right?
Should the outside strokes of the squares be removed?
I'd make two versions: one white with dark square in bg, one dark, without the square. Which colors should be assigned to them in Inkscape?
Is a uniform size for the non-square items, e.g. by adding a transparent rectangle, desirable?

Wow, you have almost created a symbol creation FAQ @Moini

There are some three-color (and even four-color) icons in the set. What should be done with those? (use opacity to get the third color?)
I'd rather use opacity instead of color. Only use the color when absolutely required by the icon.

Should all paths of the same color in an icon be unioned?
Yes if possible. It reduces the icon size. See what SVGO does.

Stroke to path is probably fine for most cases, right?
In this case I'd say yes. In most cases stroke should be removed.

Should the outside strokes of the squares be removed?
Yes if possible. I remove all strokes from icons. In this case the image is much complicated so it depends on how necessary are to understand the image. If its not required, please remove it.

I'd make two versions: one white with dark square in bg, one dark, without the square. Which colors should be assigned to them in Inkscape?
When an icon has no color assigned at all, Inkscape renders it in black. That's for most of the cases. In this case, seems to me that:

Dark square in background: should be merged in a single path, using the background color as a reference and excluding the icons.
Dark without square: Remove all references to style in the path or the symbol (except opacity if required) and it wll be rendered in black.

Is a uniform size for the non-square items, e.g. by adding a transparent rectangle, desirable?
It depends on the set. For the web, i would say yes, but for the designers, I'd say no. I try to keep the original viwebox of the iconset. Please don't add transparent images if will not be rendered, better play with the canvas size (AKA viewbox).

Should there be any groups?
Groups are not useful for a symbol in Inkscape so it can be removed.

Thanks a lot for your help, I know this is a lot of work. :100:

Thx!
I'm almost done with the easy ones ;-) (i.e. those with just two colors, didn't look at the other ones before I knew what to do with them).
As I'm not too keen on doing the final conversion to symbol set myself .... - what would be the best format to 'transfer' the data to you?
Currently, all images are in separate files. I'd make two for each symbol (with/without square), and would keep the folder structure (separate directory tree for each of the two sets).
Would that be sufficient for you to run the auto-creation script on?
I suspect that, once everything is ungrouped, colors unset or white, shape-forming strokes turned to paths, things unioned, all other strokes set to None, etc., svgo won't cause any errors.

Oh, and this I didn't understand:
"Dark square in background: should be merged in a single path, using the background color as a reference and excluding the icons."

You mean, keep its square shape (which I would have done) or punch an icon-shaped hole into the middle (possible interpretation of the above, but weird to me, sorry for asking)?

... and one more: the files don't have a viewbox, only width and height. Inkscape adds one if you copy-paste into a new document, but that comes with an additional layer... Do you have a suggestion how this can be done quickly from within Inkscape? (yes, I know I could script it...)

Save as -> Optimized SVG, check 'enable viewboxing'. Okay?

Test set attached. Would this be the right way to go on?
Icons.zip

I'll try to look at the code tomorrow morning, but I answer your questions:

what would be the best format to 'transfer' the data to you?
To me the best way would be a pull request with all the icons in a new folder with both subsets. Attaching a ZIP as you just did its OK as well.

punch an icon-shaped hole into the middle (possible interpretation of the above, but weird to me, sorry for asking)
Yes, I meant that, is what many iconsets do. Otherwise, one layer has to have a fill or stroke. If you remove the styles in all paths (rects, circles) when you put an path in top of another, it will be black on Inkscape (try it). If you keep the style, the user won't be able to edit it. In some cases, like in the Emoji One symbol set, for example, this makes sense.

Save as -> Optimized SVG, check 'enable viewboxing'. Okay?
Sounds good. :)

I've read the icons.zip code, amazing work. :)
I found some small to fix you'll see below. I've created a branch with the icons so you can work on them: https://github.com/Xaviju/inkscape-open-symbols/pull/51/files

this code can be removed

<g transform="matrix(48.14969,0,0,48.14969,-1513.4809,-137.68495)" stroke="#757575" stroke-width=".1" display="none" fill="none">
<rect display="inline" height="10" width="10" y="1" x="1"/>
<rect display="inline" height="8" width="8" y="2" x="2"/>
</g>

all the style attributes should be removed if are not for opacity.

style="color-rendering:auto;text-decoration-color:#000000;color:#000000;isolation:auto;mix-blend-mode:normal;shape-rendering:auto;solid-color:#000000;block-progression:tb;text-decoration-line:none;text-decoration-style:solid;image-rendering:auto;white-space:normal;text-indent:0;text-transform:none"

all the fill attributes should be removed if are not for opacity.

fill-rule="evenodd"

There aren't any holes punched into them... I was going to make a third set with those holes instead of white on unset background color, but that would take quite a lot of time. If it's sufficient like this, then I'll defer creation of that set for a bit.
Do you already have some shell script maybe, that does the style cleanup? It must be done manually after working on the files in Inkscape (else I'll write one, probably python, then, though).

@Moini I see, no problem, it makes sense as is now without the holes. :+1:
It won't be too difficult to remove the styles with minor changes in the gulpfile https://github.com/Xaviju/inkscape-open-symbols/blob/master/gulpfile.js I can do that.

Thank you, @Xaviju . I'm almost through with the square ones, only two folders missing.

Very good work. Also let the latest contributers upstream know about this. Perhaps also mention it and this project in the OpenStreetMap wiki where there is an article on map icon sets.

The square svgs are up here: https://github.com/Moini/inkscape-open-symbols/tree/sjjb-icons
I'll make a pull request when the others are ready, too.

@PanderMusubi : when the icon sets are done, would you do any contacting / news spreading yourself? It seems you already know exactly who would be interested :)

@PanderMusubi : when the icon sets are done, would you do any contacting / news spreading yourself? It seems you already know exactly who would be interested :)

Yes, no problem

@PanderMusubi : Thanks!

See also https://github.com/Xaviju/inkscape-open-symbols/pull/52

@Moini, I have send an BCC email to those responsible for original SJJB icons and all late forks from where I could find email addresses. Also I have added links on three pages in the OSM wiki on map icons.

Thank you, Pander :)

Hey @Moini I've seen that some sprites mixed square and inverted icons in a single sprite. I didn't expected it, but I thinks its not a bad idea. A single file for both square and inverted icons so, in the end, the whole set will consist only of 16 sprites.
See how it looks:

Would you expect to have separate files or does it look ok as in the screenshot? It seems better to me.

Should the order be changed? In the other 'sprites' (aka symbol sets) they've made it so the corresponding icons are next to each other.
Not sure what's better, though, from a user point of view. It certainly looks calmer this way, but for the large sets, alphabet ordering is easier to navigate, and icons of the second kind (in the case of the screenshot, the inverted ones) are found more easily. Do you have a preference based on experience rather than my 'guessing'?
I actually hoped that they will to come together into one, so that's great :) (drop-down menus are harder to navigate than the picture scrolling).

It makes sense to have corresponding icons together.
Since it is a lot of work, first release could display both sets in the same sprite and after that we could reorder it to improve the UX. I'm working on it.
Great work btw, it's a pleasure to work on this cleaned set. :)

That sounds fine to me - thank you!

@PanderMusubi  @Moini new symbol sets are here: https://github.com/Xaviju/inkscape-open-symbols/tree/master/sjjb
Could you please test it and ensure it works as expected?
Thanks.
@Moini amazing work. It was really easy to work with the SVGs you created. Very few bugs for so large iconset. Thanks.

They work for me. One minor change for the entries in the Symbol set pull down selection, rename "SJJB icons [..." to "SJJB Map Icons [..."
The usage of capitals is conform other entries in that list and the addition of Map explains a bit more on the origin of these symbols.

Renamed!

@Xaviju : It appears to work very well :) Thank you for helping me with them!
Does anyone happen to understand how the icon sets are sorted in the dropdown? They are in seemingly random order for me.

the order needs improving indeed. No idea how that is ordered.

Thanks both!
Yeah, symbols order does not makes sense to me, and when the set is large enough, it can be frustrating.
I was thinking of suggestion on the inkscape blueprints a text filtering of the symbol sets in the top of the box. Something like the datalist tag in HTML. What do you think?

Definitely, filtering symbols, even if just by their name, would be a nice addition to the dialog (even better if it would then allow you to see symbols from different sets with the same meaning).

Bug report for the ordering: https://bugs.launchpad.net/inkscape/+bug/1654902
Filtering seems more involved ;-)

Voted for it, also my colleagues. Here are some (sort of) related Inkscape bugs to vote for, if you would:

https://bugs.launchpad.net/inkscape/+bug/1620610 (also related to filtering)
https://bugs.launchpad.net/ubuntu/+bug/1464270
https://bugs.launchpad.net/inkscape/+bug/741856
https://bugs.launchpad.net/inkscape/+bug/1374870
https://bugs.launchpad.net/inkscape/+bug/1574518
https://bugs.launchpad.net/inkscape/+bug/171869

Pander also filed:

Display icons with name in alphabetically sorted list in symbols dock
https://bugs.launchpad.net/inkscape/+bug/1514481

Ah, yeah. And even put a bounty on it.

To further (ab)use this issue now I have found my audience, also for most of us is to vote for https://bugs.launchpad.net/inkscape/+bug/1512175

@PanderMusubi althought this could be interesting for some of us, please try to share only relevant information for the issue, otherways watchers might be receiveng undesired emails. Thanks!

I think symbols need to be updated on the files instad overload the user computer. A script can be done to order It.maybe a inkscape extension and after it export as plain svg to reduce pageload.


Example of Transcrypt, HyperApp, and SSR

I made a repo with some Sphinx docs as a step-by-step example of Transcrypt combined with HyperApp and Bottle to do server-side rendering:
https://github.com/pauleveritt/transcrypt_hyperapp_hydrate
Docs at:
https://transcrypt-hyperapp-and-ssr.readthedocs.io/en/latest/
This was intriguing to work on. Unlike other Transcrypt examples, this needed a codebase that could work in Python (first render) and JS (browser-side re-renders.) HyperApp is a great choice for this, since it is so tiny. Not only can you skip bundling altogether, you could reasonably port pieces of it to Python, so that the templating is not double-implemented. (I didn't get that far.)
Anyway, if you'd like, I could re-do this as a PR in your docs. I'd love to collaborate on a first-class story for SSR.

In extension, I released a React demo yesterday, https://github.com/retsimx/TranscryptReact

@pauleveritt
It would be very useful have this as one of the demo's in Transcryp/transcrypt/demos, including the documentation you made. A pull request to that extent is welcome!
An alternative is to have links from the site or the docs to your work on this.
@retsimx
Same holds here. Either it could become one of the demo's in the distribution, including some docs on dependencies / required tools, or there could be a link from the Transcrypt site. Unfortunately GitHub for some reason doesn't allow me to add you as one of the assignees of this issue.
Note that to be in the next version of the distro, things would have to work with Transcrypt 3.7 and CPython 3.7, which I believe shouldn't pose too much problems.
Kind regards
Jacques

@JdeH I'm interested in a conversation with you about server-side rendering. My perception: Transcrypt is for writing code that targets execution in JS, not both Python and JS. I'd like to first find out if dual-mode is interesting. If so, it brings up more questions.

Hi, OK, a quick reaction, in anticipation of a more extensive conversation.
I'd like to think that quite some code can be made to run both with Transcrypt and with CPython.
Load balancing between client and server, with the possibility to use partially the same code on both, is one of the things I had in mind with Transcrypt.
On the other hand Transcrypt will never have full CPython semantics, as it would get too slow and complicated. There are projects like PyPyJs, that do, but at a cost.
From the Transcrypt docs:

It’s lightweight, in accordance Pareto’s rule adapted for IT: 99% of the result can be achieved with 1% of the effort.
http://www.transcrypt.org/docs/html/what_why.html#what-is-transcrypt

When run from the command line, it still introduces itself with  Small Sane Subset compiler, although currently I am  happy to say that's a severe understatement, TS compiles the bulk of Python.
In short: I think dual-mode is certainly interesting!

(long, sorry)
Since you're interested, I'll continue by picking two specific places that I'm interested in.

Templating

Python web projects have a lot of complexity in templates, which are a pseudo-language without full CPython semantics.  But they solve an old/wrong problem: giving "HTML Designers" a separate universe. As such, Python code quality tools (linters, black, mypy, coverage, etc.) can't help.
Modern frontends have un-split this divide into "components" which unify logic, state, presentation, and even styling. I worked quite a bit on a component model for Jinja2 AST. Then realized, it was flawed. We need "templating" that works with the VDOM on the client, Python on the server, same template code. And preferably something where mypy can peek into the "template". Jinja2's AST isn't VDOM-oriented.
Hence my interest in converting the h function into something that can render the same Transcrypt-Python view server-side as well as client side. But I'll need help from Transcrypt people, as it needs to be good. So this idea -- Python-based progressive web apps and SSR -- would need to be interesting to Transcrypt.

Developer experience

As others discussed, seamlessly plugging into Parcel and webpack lets frontend developers keep the file watching, on-the-fly transpire, browser reload, and HMR.
As a Pyramid guy, I'm interested in Python SSR. My GatsbyJS project has 500 MB in node_modules. It's insane. How much could get from SSR in Python, with zero NodeJS anywhere around? I think it's worth exploring:

A view that can pre-render in Python on the server

Then when someone clicks "Next Page" in the browser, the same view renders the next batch of data

And when you need an HTTP fetch, it's back to a Python endpoint

Getting a webpack-devserver style setup for Python with Transpile is going to be some work. But it's do-able.


Our application will going to spread world wide, so it's better we can support for localization. It's mandatory feature in the most of the web applications.

in the future, it can be re-opened.
Now cleaning up issues.


Pc Graphing Components State

import pynecone as pc
from .weatherscraper import *

class State(pc.State):
    """The app state."""
    cache_data: list[float]
    cache_load: bool = False
    def data(self) -> None:
        for _ in range(0, 5):
            self.cache_data.append(get_weather('Emmen'))
        self.cache_load = True

def index() -> pc.Component:
    return pc.center(
        pc.cond(
            State.cache_load == True,
            pc.chart(
                pc.line(
                    data=pc.data(
                        'line',
                        x=[1, 2, 3, 4], y=State.cache_data
                    )
                )
                ),
            pc.button(
                'Load data',
                on_click=State.data

            )

        )

    )

# Add state and page to the app.
app = pc.App(state=State)
app.add_page(index)
app.compile()

As seen from discord you should be able to pass in state vars as the components in pc data

New recharts graphing library is fully working with state and rx.data is removed.


Is possible to disable the dot notation on the field option?

Issue Type (delete the irrelevant ones)

[x] Question

Specs
What version are you using? v2.21.11
What browser? Chrome, Firefox
Expected Behavior
Want to display data from an API that has a field that contains a . on the key.
Actual Behavior
The data from the fields that have a . wont show on the table because of the dot notation.
jsfiddle
https://jsfiddle.net/xyz3h9fa/

Did find a solution to this as I am facing the same issue?

No... In my case I was able to change the API return, but if that wasn't possible I would probably need to change the data structure before pass to the table component, not ideal but should work...


Feature: Specifying the load order of extensions (reduce startup wait-time)

Allow the user to specify in what order installed extensions get loaded. This could reduce wait times quite a bit, or at least give the impression of a faster startup; by allowing small, essential extensions to get loaded first.
Users often install a lot of extensions, but in reality, only very few are really vital for the user's workflow. By allowing these "vital" extensions to be loaded first, the user has to wait less time before being able to work.
Proposal
The load order could be specified as an array, where extensions lower in the array (= with lower index) get loaded first:
"extensions.loadOrder": [
    "my_super_important_extension",
    "somewhat_important",
    "mildly_important",
    "whatever"
]

Extensions not mentioned in the list would get loaded after the last specified extension (after whatever).

Already today not all extensions are loaded on startup. Loaded extensions can be seen via F1 > Show Running Extensions

@alexandrudima True, however I still think this feature would be useful. When I take a look at my loaded extensions during normal workload, there are two extensions with around 33 ms, a bunch around 500 ms and one > 2400 ms. The most important extension needs 366 ms. If I could make this important one load first, followed by the two very quick ones and then the rest, could speed up my workflow.
By the way, what's the difference between "Activation" and "Startup Activation"?

@Lisoph Can you create issues against the extensions with slow startup? It is somewhat crazy that an extension would take 2400ms to activate...
Startup Activation means that the extension got activated on VSCode startup (it uses * or workspaceContains: activation events).
The other got activated by you doing something. e.g. clicking an action, opening a certain file type, etc.

@alexandrudima good idea with raising an issue on the extension's GitHub, but I don't think this can apply to all extensions. I wouldn't necessarily consider slow startup a bug of an extension. Some extensions just need some time to load (for whatever reason).
Thanks for clarifying the activations!

I still think this would be really helpful. From experience, loading extentions such as Docker, Azure or Live Share takes priority over things such as XML and JSON formater, so I need to wait few seconds before i can format a document. I would like to put these extentions first because they take almost no time to load and I need them availible as soon as possible

I have installed a tab which replaces the empty workspace view of VS Code. Its startup activation is 12ms, but I have to wait two or three seconds from VS Code's startup to see it because it's a ways down the load queue. This is the only extension I want to have loaded almost instantly, so I second this feature request.

I'm finding visual conflicts with extensions that enhance the text editor visuals/experience and want to decide which extensions have priority over the others... I'm assuming being able to set the load-order (as well as the draw-order, supposing that could be different) would be a welcome addition to VS Code users.

This feature would be useful for my workflow that uses both direnv and rust-analyzer. rust-analyzer needs to run after direnv has already loaded the environment, because otherwise it's not able to find the command line tools it needs. Currently this is fixable using the Rust Analyzer > Restart server action, but I vaguely remember using other language servers that don't support a restart action (or their restart action doesn't work properly).

I believe this may be what is causing the Redwood repository reported issue
VS Code Extension wont load in remote - ssh mode. #1478

Isn't https://github.com/microsoft/vscode/issues/57481 the same issue?

Isn't https://github.com/microsoft/vscode/issues/57481 the same issue?

It appears it is. It was created 5 months after this one and mostly other people are commenting there. This yields > 60 upvotes (22 here, 43 there).
I don't think I'm a fan of their priority solution though. Shuffling around precedence scores could become unwieldly.

Hi, please reconsider this one. See for example the issue above referencing this one: https://github.com/rust-lang/rust-analyzer/issues/15852 and the number of thumbs down on the above triage bot comment.
Without being able to control the startup order, it seems it's not possible to influence the environment which is necessary so that later extensions see the environment configured by the earlier extensions.
cc @isidorn @alexdima

In my setup Bookmarks extensions (alefragnani.Bookmarks, tintinweb.vscode-inline-bookmarks) conflict with Outline generation extensions (Oracle.sql-developer) when are activated before (the Outline panel remain empty).
I need to manually Disable and Enable the Bookmark extensions after all Outline extension are activated

I don't really care about the order of extensions, but I would really love to be able to have a JS or Python related extension load only when first JS or Python file is opened, or simply being able to defer loading of any extension n seconds after startup and then have them load with lowest priority so that the IDE doesn't hang


Calling multiple STAUTDEFs in a row from recursive PROCDEF

Hi,
I'm trying to call multiple different STAUTDEFS in a row but I can't figure out if this is possible. Suppose I have the following two STAUTDEFS:
STAUTDEF m0 [] () ::=
    STATE   s0, s1
    INIT    s0
    TRANS   s0 -> ISTEP -> s1
ENDDEF

STAUTDEF m1 [] () ::=
    STATE   s0, s1
    INIT    s0
    TRANS   s0 -> ISTEP -> s1
ENDDEF

Then I want to just choose and execute one and recursively repeat:
PROCDEF proc [] ( ) ::=
    (
        ( m0 [] ( ) )
    ##
        ( m1 [] ( ) )
    ) >-> proc [] ( )
ENDDEF

The compiler tells me to use the enable operator ">>>", which needed EXITs on the STAUTDEFs:
STAUTDEF m0 [] () EXIT ::=
    STATE   s0, s1
    INIT    s0
    TRANS   s0 -> ISTEP -> s1
ENDDEF

STAUTDEF m1 [] () EXIT ::=
    STATE   s0, s1
    INIT    s0
    TRANS   s0 -> ISTEP -> s1
ENDDEF

PROCDEF proc [] ( ) ::=
    (
        ( m0 [] ( ) )
    ##
        ( m1 [] ( ) )
    ) >>> proc [] ( )
ENDDEF

This compiles but returns quiescence after executing one of the STAUTDEFs, and does not repeat.  I get the feeling that the STAUTDEF never properly exits. Also, it would solve my problem if I could call the PROCDEF proc from a STAUTDEF but the documentation states that this should not be possible. Is it possible to call multiple STAUTDEFs the ways i'm describing?

It is possible, and your feeling is right: you didn't exit the stautdef.
With the following model
STAUTDEF m0 [C :: Int] () EXIT ::=
    STATE   s0, s1, s2
    INIT    s0
    TRANS   s0 -> C ! 1 -> s1
            s1 -> EXIT -> s2
ENDDEF

STAUTDEF m1 [D :: Int] () EXIT ::=
    STATE   s0, s1, s2
    INIT    s0
    TRANS   s0 -> D ! 2 -> s1
            s1 -> EXIT -> s2
ENDDEF

PROCDEF proc [C,D :: Int] ( ) ::=
    (
        ( m0 [C] ( ) )
    ##
        ( m1 [D] ( ) )
    ) >>> proc [C,D] ( )
ENDDEF

CHANDEF channels ::=
    C,D :: Int
ENDDEF

MODELDEF model ::=
    CHAN IN
    CHAN OUT C,D
    BEHAVIOUR proc[C,D]()
ENDDEF

I get what I think you want:
TXS >> stepper model
TXS >>  Stepper started
TXS >> step 10
TXS >>  .....1: Act { { ( C, [ 1 ] ) } }
TXS >>  .....2: Act { { ( C, [ 1 ] ) } }
TXS >>  .....3: Act { { ( C, [ 1 ] ) } }
TXS >>  .....4: Act { { ( C, [ 1 ] ) } }
TXS >>  .....5: Act { { ( C, [ 1 ] ) } }
TXS >>  .....6: Act { { ( D, [ 2 ] ) } }
TXS >>  .....7: Act { { ( C, [ 1 ] ) } }
TXS >>  .....8: Act { { ( C, [ 1 ] ) } }
TXS >>  .....9: Act { { ( D, [ 2 ] ) } }
TXS >>  ....10: Act { { ( C, [ 1 ] ) } }
TXS >>  PASS

If this indeed solves your problem, please close this issue!

It does indeed solve the issue. Thanks!


How to create user-defined components in ionic2?

@Component({
 selector: "my component"
})
class MyComponent() {
}

@Page({
directives:[MyComponent]
})
class MyIonicPage { }

alternative you can provide the directive directly to the @App decorator so it is available globally.

Closing this as it is not an issue with the framework. Please ask questions on the forums: https://forum.ionicframework.com/c/ionic-2 or join the worldwide Slack group and ask in the #ionic-v2 channel: http://ionicworldwide.herokuapp.com/
There are many topics on the forums for components already: https://forum.ionicframework.com/t/how-to-make-a-directive-or-equivalent/40428


Fix geojson inspect

This PR fixes the geojson inspection bug. A new filter is added on client side to stop the querries on geojson layers.

First part makes total sense. Shorter the better. I did not quite get the second part though. You think this logic should be moved elsewhere?

@danlamanna I changed it according to your comments. PTAL


0.18 Tutorial uses Next Featuers (functional components)

Problem
The current yew.rs site tutorial (https://yew.rs/tutorial#components) is written using functional components, which (as I understand it) are not available in yew 0.18.

In this tutorial, we will be using function components.

Steps To Reproduce
Steps to reproduce the behavior:

Go to https://yew.rs/tutorial#components
See that explanations are in terms of functional components

Expected behavior
The tutorial should be written in terms of struct components, or hidden for 0.18 (and only shown on next) as to avoid confusion.
Screenshots

Environment:

Yew version: 0.18 (on website)

Questionnaire

[ ] I'm interested in fixing this myself but don't know where to start
[ ] I would like to fix and I have a solution
[x] I don't have time to fix this right now, but maybe later

I would fix but not sure I have the knowledge to rewrite the tutorial (I was looking at it since I was confused, so that's indication enough :stuck_out_tongue_closed_eyes: . Propose that either the tutorial link not exist for 0.18 (which I could fix) - or it be rewritten.

Thank you! :heart:


Add configuration option for making exceptions less noisy

Adds the option hpx.exception_verbosity. It currently takes three values:

0: prints filename, line, function name, and the exception string
1: prints everything except the build configuration and environment variables
2: prints everything

I'm not sure if they need to be shifted to have 0 mean no output, but I don't see that being useful for anyone. We could also use names (like minimal, reduced, full), but using numbers for the level is similar to what we do with logging.
Flyby: fix reading of ini files from HOME and PWD.
To do:

[x] documentation

I applied the verbosity setting also in the termination handler now.


Reading several Runs as Group does not work

When reading several runs, the class "Group" is used. In the init function, for each run, the configs are iterated over. Unfortunately, a config is only added when the config_id is not in the config_mapping (see from line 53). However, every run starts the config_ids from 0, so starting from the second run, all config_ids are already part of the config_mapping. My suggestion, change the config_mapping to a tuple of ids (run_id, config_id).

I'm sorry, this was my fault. It is not an issue.


Update mypy version

What does this PR do?
This PR updates the mypy version as mentioned in #15159

Fixes #15159
Does your PR introduce any breaking changes? If yes, please list them.

Before submitting

[x] Was this discussed/approved via a GitHub issue? (not for typos and docs)
[x] Did you read the contributor guideline, Pull Request section?
[x] Did you make sure your PR does only one thing, instead of bundling different changes together?
[x] Did you make sure to update the documentation with your changes? (if necessary)
[x] Did you write any new necessary tests? (not for typos and docs)
[x] Did you verify new and existing tests pass locally with your changes?
[x] Did you list all the breaking changes introduced by this pull request?
[x] Did you update the CHANGELOG? (not for typos, docs, test updates, or minor internal changes/refactors)

PR review
Anyone in the community is welcome to review the PR.
Before you start reviewing, make sure you have read the review guidelines. In short, see the following bullet-list:

[x] Is this pull request ready for review? (if not, please submit in draft mode)
[x] Check that all items from Before submitting are resolved
[x] Make sure the title is self-explanatory and the description concisely explains the PR
[x] Add labels and milestones (and optionally projects) to the PR so it can be classified

Did you have fun?
Make sure you had fun coding 🙃

Wondering why dependabot did not find it...

Wondering why dependabot did not find it...

Dependabot found it, but things were breaking, therefore @akihironitta closed it https://github.com/Lightning-AI/lightning/pull/15158#issuecomment-1281698938

@Atharva-Phatak the mypy check needs to be resolved (Unused "type: ignore" comment). Could you look into it?

@awaelchli I thought they would be resolved with an updated version of mypy. I will remove these comments.

@awaelchli I thought they would be resolved with an updated version of mypy. I will remove these comments.

CI is using the version specified in the requirements - therefore mypy errors you are seeing in CI is originating from updated mypy version already. Let us know if you need any help with it :zap:

@awaelchli Could you help me out here ? I am understanding what is going wrong here. Sorry :)

Still, the mypy tests are failing 🤔

This should be good now, but I'd wait until 1.8 is released to merge it just in case we it breaks something


Tweak command documentation and argument validation

@bratseth

I didn't even recognize the title. Coldplay?! 😞

Abject failure 😞

haha! when working on https://docs.vespa.ai/en/text-matching-ranking.html I needed some titles for all the use cases described there. I am quite sure songs can be replaced with objectively high-quality ones, feel free (but don't break the documentation) 😎 😎


Gitlab: Optimize Activities + Menu Commands

Description

Add unsupported activity

Rename My Recent Activities to Recent Activities

Recent Activities got a dropdown to switch between My Activities and My Projects

Add Merge Request Menu command

Add Issues Menu command

Add group filter dropdown for epics

My Groups only show one level at a time
Users can switch to a flat list view via a preference.

Checklist

[x] I read the extension guidelines
[x] I read the documentation about publishing
[x] I ran npm run build and tested this distribution build in Raycast
[x] I checked that files in the assets folder are used by the extension itself
[x] I checked that assets used by the README are placed outside of the metadata folder

Hi! Thank you so much for updating your amazing app! It looks good to me. I'd just ask to update the Raycast API version to the latest. Do you mind doing this? Then we can get this out still today :)

Hi @mil3na 👋,
I there a technical advantage of upgrade to the latest API version?
I didn't upgrade higher than 1.50 because

People who are stuck 1.50 can still use the extension
I didn't use any new feature which come after 1.50

Is upgrading to the newest API a requirement now?


Added ribbon-header

Q
A

Bug fix?
no

New sample?
yes

Related issues?

What's in this Pull Request?
Added ribbon-header

Loving it @tecchan1107! 🤗🧡💜


Performance improvement by running the function in concurrent using Promise.all ✈

This PR aims to enhance the performance of the function by using Promise.all to run it concurrently and utilize CPU resources more effectively. According to the documentation, Promise.all returns a single promise that resolves when all of the promises passed as an iterable has resolved. This allows the function to execute multiple tasks in parallel and reduce the overall execution time.
Please review the code and let me know if you have any feedback or suggestions. I appreciate your time and consideration. Thank you.

Thanks but this is not needed in this script


It looks like builds failed when using './'

I think you need to use abs paths but what do I know.

yeah thats pretty true and yea thats true and yeah thats pretty true and yea thats true.

Also, PEPE wins

Our senior engineer already fixed these issues, thank you.


Add DNS challenge provider 'exec'

As discussed in #505, this commits adds a very simple DNS provider which calls out to an external program/script which must then add or remove the DNS record.
I'm not sure how much testing is required for such a simple provider, please advise.
Closes #505, supersedes #417

Updated, let me know what you think!

LGTM except you missed a spot. ;) Then we'll merge and give it a shot.

Fixed, thanks!

Tried it in real life, works for the use case described in #505

Awesome, thanks for taking the time to review this!


[usecase-lite] Add VideoWebSite test for lite wrt usecase

Impacted TCs num(approved): New 1, Update 0, Delete 0
Unit test Platform: Crosswalk Project for Android 15.44.391.7
Android test result summary: Pass 1, Fail 0, Block 0
BUG=https://crosswalk-project.org/jira/browse/XWALK-5232

LGTM


Support inheriting TCP listener from parent process via fd0

Hi,
Here's a rough draft PR.  Not for merging yet, just for possible discussion.

I'm not really happy with the option parsing.  Having just a switch e.g. static-web-server --inherit-listener seems reasonable, but it doesn't look like you can do that and also have an ENV variable control the same thing.  I'll have a closer look at this.
Probably better to split off the transition to a separated bind call into a separate commit.
Not sure if the trace output is OK or not?
Error handling should be improved.

Closes #36

After a quick look there is some things like error handling to improve and minor refactorings to do but it's not so radical.
I will give it a second review soon after you fix first the linting issues since the CI complains.

Any problem trying to fix those issues, how could I help?
BTW I would like to know the steps of how to test it.

I have pushed a small commit to fix linting warnings.

BTW I would like to know the steps of how to test it.

In general the PR looks fine however I would like to give it a test. I have a Linux so I could test it to verify functionality but I need you help here sharing a PR description with steps to do it so.

Sorry, work got busy this week.  I've done a chunk more work on it, but haven't tidied it up yet.  I'll try and get onto it later today or tomorrow.

Don't worry take your time.
Just let you know that I have another PR almost ready to be merged today but it touches src/server.rs so  this PR can could have conflicts afterward. However is not really a problem I will send a minor commit here to keep it up-to-date if it's needed.

Still super-busy with work (I'm freelance so work can be a bit too "bursty" sometimes, when multiple clients all have simultaneous problems).  I will get back to this however.  Sorry for the delay...

Hopefully I'll have time later on today to rebase this...

Also the restart functionality that we have gained with this is also working fine. I crashed the server intentionally and then I got no service interruptions.

I'm using my workstation with Arch Linux with latest systemd, no special configs.

Looks like the DeviceAllow lines I was using were invalid, but my testrig wasn't reporting that (not sure if due to a config difference, or systemd version difference).  I've pushed a fix for that.

So warnings have disappeared.
$ journalctl -xe -u static-web-server
may 30 17:48:16 quintana systemd[1]: Stopped Static Web Server.
   Subject: A stop job for unit static-web-server.service has finished
   Defined-By: systemd
   Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel

   A stop job for unit static-web-server.service has finished.

   The job identifier is 19263 and the job result is done.
may 30 17:48:42 quintana systemd[1]: Started Static Web Server.
   Subject: A start job for unit static-web-server.service has finished successfully
   Defined-By: systemd
   Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel

   A start job for unit static-web-server.service has finished successfully.

   The job identifier is 19265.

Do you you want do something more or can we merge it?

I think it's pretty much there.  I'll just document the systemd unit file a bit more, and push those.  If you're happy with that further change, please go ahead!
Thanks!
Tim.

I've left that last change as a separate commit to make it easier to review.
LMK if you'd like me to squash it into the commit which added the systemd unit files (or feel free to do so yourself).

Definitely this is a great feature. I plan to deliver a new beta release (probably last beta pre major) this week. So I'll let you know when that happens.
Thanks for the effort!

v2.0.0-beta.4 released

Just to let it know that this is no longer beta. See v2.0.0