Злые слияния в мерзавце?

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

я имею в наличии метод для установки имени файла и необходимых заголовков:

def render_csv(filename = nil)
  filename ||= params[:action]
  filename += '.csv'

  if request.env['HTTP_USER_AGENT'] =~ /msie/i
    headers['Pragma'] = 'public'
    headers["Content-type"] = "text/plain" 
    headers['Cache-Control'] = 'no-cache, must-revalidate, post-check=0, pre-check=0'
    headers['Content-Disposition'] = "attachment; filename=\"#{filename}\"" 
    headers['Expires'] = "0" 
  else
    headers["Content-Type"] ||= 'text/csv'
    headers["Content-Disposition"] = "attachment; filename=\"#{filename}\"" 
  end

  render :layout => false
end

Используя это облегчает иметь что-то вроде этого в моем контроллере:

respond_to do |wants|
  wants.csv do
    render_csv("users-#{Time.now.strftime("%Y%m%d")}")
  end
end

И имеют представление, которое похоже на это: (generate_csv от FasterCSV)

UserID,Email,Password,ActivationURL,Messages
<%= generate_csv do |csv|
  @users.each do |user|
    csv << [ user[:id], user[:email], user[:password], user[:url], user[:message] ]
  end
end %>

20
задан Jakub Narębski 22 September 2009 в 19:50
поделиться

2 ответа

Потому что он помещает в код вещи, которых никто никогда не просил. Как если бы у вас был этот код:

$foo = bar;
$baz = qxx;

и это изменение:

$foo = bar;
$foo++;
$baz = qxx;

было объединено с этим изменением:

$foo = bar;
$foo--;
$baz = qxx;

таким образом, который каким-то образом произвел:

$foo = bar;
$foo++;
$foo--;
--$baz;
$baz = qxx;

Очевидно, это зло.

Я предполагаю, что это man gitglossary вызывает достаточно беспокойства, потому что чем больше задействованы ваши алгоритмы слияния, тем больше вероятность того, что они произведут такое.

20
ответ дан 30 November 2019 в 00:01
поделиться

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


Evil merge может потребоваться, когда вы разработали функцию «A» в основной ветви и функцию «B» в боковой ветви, и эти функции конфликтуют семантическим (нетекстовым) образом. В качестве примера можно использовать одно и то же имя для глобальной переменной с разными значениями - это требует переименования переменной для одной из функций.

Для злого слияния " git show --cc " имеет непустое значение компактный комбинированный diff (но я не уверен, является ли это отношением эквивалентности; импликация может быть только в одном направлении, то есть «злое слияние», а затем непустое « git diff-tree -p --cc » ).

8
ответ дан 30 November 2019 в 00:01
поделиться
Другие вопросы по тегам:

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