Покажите теги для удаленного hg репозитория

Действительно ли возможно видеть, что список всех наклеивает удаленный Подвижный репозиторий, не клонируя его сначала? В мерзавце я могу работать git ls-remote --tags.

15
задан Jonathan Leffler 28 July 2011 в 02:39
поделиться

2 ответа

Сначала позвольте мне сказать, что ответ Джона верен. Это одна из самых волосатых частей спецификации, так что хорошо на Джоне для погружения в голову первым.

Во-вторых, позвольте мне сказать, что эта строка:

Существует неявное преобразование из группы методов в совместимый тип делегата

(добавлено ударение) глубоко вводит в заблуждение и вызывает сожаление. Я поговорю с Мэдсом о том, чтобы удалить слово «совместимый.»

Причина, по которой это вводит в заблуждение и вызывает сожаление, заключается в том, что это выглядит как ссылка на раздел 15.2 «Совместимость делегата». В разделе 15.2 описывается взаимосвязь совместимости между методами и типами делегата , но это вопрос конвертируемости групп методов и типов делегата , который отличается.

Теперь, когда мы убрали это с пути, мы можем пройти через раздел 6.6 спецификации и посмотреть, что мы получим.

Для разрешения перегрузки необходимо сначала определить, какие перегрузки являются применимыми кандидатами . Кандидат применим, если все аргументы неявно преобразуются в формальные типы параметров. Рассмотрим эту упрощенную версию программы:

class Program
{
    delegate void D1();
    delegate string D2();
    static string X() { return null; }
    static void Y(D1 d1) {}
    static void Y(D2 d2) {}
    static void Main()
    {
        Y(X);
    }
}

Давайте пройдемся по ней поочередно.

Существует неявное преобразование из группы методов в совместимый тип делегата.

Я уже обсуждал, как слово «совместимый» прискорбно здесь. Двигаюсь дальше. Мы задаемся вопросом при выполнении разрешения перегрузки на Y (X), преобразуется ли группа методов X в D1? Он преобразуется в D2?

С учетом типа делегата D и выражение E, которое классифицируется как группа методов, неявное преобразование существует от E до D, если E содержит по крайней мере один метод, который применим [...] к список аргументов, созданный с помощью типы параметров и модификаторы D, как описано ниже.

Пока так хорошо. X может содержать метод, применимый к спискам аргументов D1 или D2.

Приложение времени компиляции преобразования из группы методов E в тип делегата D описано ниже.

Эта строка действительно не говорит ничего интересного.

Следует отметить, что наличие неявного преобразования из E в D не гарантирует, что приложение времени компиляции преобразования будет успешным без ошибок.

Эта линия завораживает. Это означает, что существуют неявные преобразования, которые могут быть превращены в ошибки! Это странное правило C #. Ниже приведен пример:

void Q(Expression<Func<string>> f){}
string M(int x) { ... }
...
int y = 123;
Q(()=>M(y++));

Операция приращения недопустима в дереве выражений. Однако лямбда по-прежнему может преобразовываться в тип дерева выражения, даже если преобразование когда-либо используется, это ошибка! Принцип здесь состоит в том, что мы можем захотеть изменить правила того, что может пойти в дереве выражений позже; изменение этих правил не должно изменять системные правила типа . Мы хотим заставить вас сделать ваши программы однозначными сейчас ,чтобы при изменении правил для деревьев выражений в будущем сделать их лучше, мы не вводим прерывистых изменений в разрешении перегрузки .

В любом случае, это еще один пример такого странного правила. Преобразование может существовать для разрешения перегрузки, но может быть ошибкой для фактического использования. Хотя на самом деле, это не совсем та ситуация, в которой мы находимся.

Переход:

Выбирается один метод M, соответствующий вызову метода формы E (A) [...] Список аргументов A - это список выражений, каждое из которых классифицируется как переменная [...] соответствующего параметра в списке формальных параметров D

OK. Таким образом, мы перегружаем разрешение на X по отношению к D1. Формальный список параметров D1 пуст, поэтому мы перегружаем разрешение на X () и джой, мы находим метод «string X ()», который работает. Аналогично, список формальных параметров D2 пуст. Опять же, мы находим, что «string X ()» это метод, который также работает здесь.

Здесь принцип заключается в том, что определение конвертируемости группы методов требует выбора метода из группы методов с использованием резолюции перегрузки, и разрешение перегрузки не учитывает возвращаемые типы .

Если алгоритм [...] выдает ошибку, то возникает ошибка времени компиляции. В противном случае алгоритм создает единственный наилучший способ М, имеющий такое же количество параметров, как D, и преобразование считается существующим.

В группе методов X имеется только один метод, поэтому он должен быть лучшим. Мы успешно доказали, что преобразование существует от X к D1 и от X к D2.

Эта строка актуальна?

Выбранный метод M должен быть совместим с типом делегата D, иначе возникает ошибка времени компиляции.

На самом деле, нет, не в этой программе. Мы никогда не доходим до активации этой линии. Потому что, помните, то, что мы здесь делаем, это пытаемся сделать разрешение перегрузки на Y (X). У нас есть два кандидата Y (D1) и Y (D2). Применимы оба варианта. Что лучше ? Нигде в описании не описывается оптимальность между этими двумя возможными преобразованиями .

Теперь, конечно, можно утверждать, что действительное преобразование лучше, чем преобразование, которое приводит к ошибке. Тогда фактически будет сказано, что разрешение перегрузки DOS рассматривает типы возврата, чего мы хотим избежать. Тогда вопрос в том, какой принцип лучше: (1) сохранять инвариант того, что разрешение перегрузки не рассматривает возвращаемые типы, или (2) пытаться выбрать преобразование, которое, как мы знаем, будет работать над тем, которое мы знаем, не будет?

С помощью lambdas мы рассматриваем возвращаемый тип в этих видах преобразований, в разделе 7,4,3,3:

E является анонимной функцией, T1 и T2 являются типами делегатов или деревом выражений типы с идентичными списками параметров, для E существует выведенный тип возврата X в контексте этого списка параметров, и одно из следующих положений:

  • T1 имеет возвращаемый тип Y1, а T2 имеет возвращаемый тип Y2, и преобразование от X до Y1 лучше, чем преобразование из X в Y2

  • T1 имеет возвращаемый тип Y, и T2 является недействительным возвращаемым

К сожалению, преобразования групп методов и преобразования лямбда являются противоречивыми в этом отношении. Тем не менее, я могу жить с этим.

В любом случае, у нас нет правила «betterness», чтобы определить, какое преобразование лучше, X в D1 или X в D2. Поэтому мы приводим ошибку неоднозначности в разрешении Y (X).

-121--732944-

Интернированы целые числа от -1 до 255 (?), а также строковые литералы. Каждый экземпляр в источнике фактически представляет один и тот же объект.

В CPython результатом id () является адрес в пространстве процесса PyObject.

-121--3080501-

Тэги хранятся в рабочем каталоге в .hgtags - т.е. в рабочей копии, а не в локальном «репозитории». Поскольку все удаленные операции выполняются в удаленном репозитории, а не в удаленной рабочей копии, отсутствует путь удаленного отображения тэгов.

В сущности, .hgtags просто дает наборы изменений удобные имена, тэги не имеют ничего общего с метаданными репозитория или управлением версиями.

Обратите внимание, что философия проектирования Mercurial заключается в том, что она должна быть масштабируемой; Для того, чтобы распределенная система управления версиями была масштабируемой, «тяжелая работа» должна быть выполнена на машине, которая инициировала команду, поэтому вы должны сначала получить клон, чтобы сделать что-либо трудное.


Изменить: Как указывает Том Андерсон (см. комментарии), тэги на самом деле являются объединением тех, которые определены в файлах .hgtags во всех редакциях головы, что делает его еще более сложным.

13
ответ дан 1 December 2019 в 03:04
поделиться

Это не возможно со стандартным Подвижным репозиторием. Если вы можете ssh в удаленную машину, просто сделать так и работать: тэги гг

9
ответ дан 1 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: